From ef963fab24875440d2f1be29e725096ceac2d443 Mon Sep 17 00:00:00 2001 From: rylon Date: Mon, 29 Feb 2016 17:08:28 +0100 Subject: [PATCH] included move notice,removed all files --- .gitignore | 3 - api/api.php | 219 - api/api_default.php | 40 - api/api_login.php | 30 - api/api_system.php | 22 - api/autoload.inc.php | 2 - api/verify.php | 20 - autoload.inc.php | 23 - cache/autoload.inc.php | 2 - cache/cache.php | 30 - config/autoload.inc.php | 2 - config/config.php | 28 - config/config_ids.php | 32 - cron/autoload.inc.php | 2 - cron/cron.php | 58 - cron/cron_cache_delete.php | 9 - cron/cron_log2sqlite.php | 68 - cron/cronjob.php | 6 - cron/cronstatus.php | 29 - cron/crontime.php | 58 - db/autoload.inc.php | 6 - db/connection/Connection.php | 47 - db/connection/ConnectionAMQP.php | 66 - db/connection/ConnectionAbstr.php | 28 - db/connection/ConnectionMYS.php | 56 - db/connection/ConnectionPG.php | 61 - db/connection/ConnectionSQLite.php | 48 - db/dbinfo/DBInfo.php | 13 - db/dbinfo/DBInfoAMQP.php | 19 - db/dbinfo/DBInfoMYS.php | 19 - db/dbinfo/DBInfoPG.php | 19 - db/dbinfo/DBInfoSQLite.php | 15 - db/qq/QP.php | 35 - db/qq/QQ.php | 34 - db/qq/QQuery.php | 16 - db/result/Result.php | 16 - db/result/ResultAMQP.php | 37 - db/result/ResultMysqli.php | 37 - db/result/ResultMysqliPrepare.php | 58 - db/result/ResultPostgres.php | 39 - db/result/ResultSQLite.php | 81 - dbd/autoload.inc.php | 3 - dbd/qq/SYS_API_TREE.php | 15 - dbd/qq/SYS_CACHE_CHECK.php | 12 - dbd/qq/SYS_CACHE_DELETE.php | 12 - dbd/qq/SYS_CACHE_DELETE_ALL.php | 10 - dbd/qq/SYS_CACHE_PUT.php | 11 - dbd/qq/SYS_CRON_GET.php | 11 - dbd/qq/SYS_CRON_LAST_VISIT.php | 11 - dbd/qq/SYS_CRON_LIST.php | 11 - dbd/qq/SYS_CRON_UPD.php | 11 - dbd/qq/SYS_LOCALE_SET_LOCALE.php | 15 - dbd/qq/SYS_LOG_DEL.php | 11 - dbd/qq/SYS_LOG_INSERT.php | 30 - dbd/qq/SYS_LOG_MONTH.php | 11 - dbd/qq/SYS_LOG_MONTH_DEL.php | 11 - dbd/qq/SYS_LOG_OLDEST.php | 11 - dbd/qq/SYS_PAGE_GROUP.php | 17 - dbd/qq/SYS_SECURITY_AVAILABLE.php | 13 - dbd/qq/SYS_SECURITY_CHECK.php | 15 - dbd/qq/SYS_SECURITY_CREATE.php | 17 - dbd/qq/SYS_SECURITY_LOGIN_MD5.php | 15 - dbd/qq/SYS_SECURITY_LOGIN_SHA1.php | 15 - dbd/qq/SYS_SECURITY_UPDATE_LASTACTIVE.php | 19 - dbd/qq/SYS_SECURITY_UPDATE_PW.php | 15 - dbd/sql/mysql/data/basic_locale_string.sql | 26 - dbd/sql/mysql/data/sai_api.sql | 152 - .../mysql/data/sai_error_locale_string.sql | 9 - dbd/sql/mysql/data/sai_locale_string.sql | 2 - dbd/sql/mysql/data/system_api.sql | 25 - dbd/sql/mysql/data/system_api_default.sql | 2 - dbd/sql/mysql/data/system_cron.sql | 2 - dbd/sql/mysql/data/system_page.sql | 13 - dbd/sql/mysql/data/system_rights.sql | 13 - dbd/sql/mysql/schema/system_api.sql | 12 - dbd/sql/mysql/schema/system_cache.sql | 9 - dbd/sql/mysql/schema/system_cron.sql | 13 - dbd/sql/mysql/schema/system_locale_string.sql | 10 - dbd/sql/mysql/schema/system_log.sql | 24 - dbd/sql/mysql/schema/system_page.sql | 11 - dbd/sql/mysql/schema/system_rights.sql | 9 - dbd/sql/mysql/schema/system_todo.sql | 29 - dbd/sql/mysql/schema/system_user.sql | 15 - .../mysql/schema/system_user_to_rights.sql | 7 - dbd/sql/pg/data/basic_locale_string.sql | 23 - dbd/sql/pg/data/sai_api.sql | 148 - dbd/sql/pg/data/sai_error_locale_string.sql | 9 - dbd/sql/pg/data/sai_locale_string.sql | 2 - dbd/sql/pg/data/system_api.sql | 19 - dbd/sql/pg/data/system_cron.sql | 1 - dbd/sql/pg/data/system_rights.sql | 13 - dbd/sql/pg/schema/schema.sql | 2 - dbd/sql/pg/schema/system_api.sql | 16 - dbd/sql/pg/schema/system_cache.sql | 32 - dbd/sql/pg/schema/system_cron.sql | 17 - dbd/sql/pg/schema/system_locale_string.sql | 13 - dbd/sql/pg/schema/system_log.sql | 30 - dbd/sql/pg/schema/system_rights.sql | 12 - dbd/sql/pg/schema/system_todo.sql | 34 - dbd/sql/pg/schema/system_user.sql | 18 - dbd/sql/pg/schema/system_user_to_rights.sql | 16 - dbd/sql/pg/util_copy_api_table_by_groupa.sql | 13 - dbd/tbl/UserLoginsTable.php | 14 - dbd/tbl/UserRightsTable.php | 12 - dbd/tbl/system_api.php | 22 - dbd/tbl/system_cron.php | 18 - dbd/tbl/system_locale_string.php | 22 - dbd/tbl/system_log.php | 26 - dbd/tbl/system_page.php | 15 - dbd/tbl/system_todo.php | 35 - dbd/tbl/system_user.php | 19 - docu/apiclass/ApiClass.php | 345 - docu/apiclass/ApiVerify.php | 17 - docu/apiclass/PageApi.php | 110 - docu/autoload.inc.php | 4 - docu/code_docu.php | 63 - docu/docu.php | 25 - docu/docu_categories.php | 6 - docu/index/api.php | 119 - docu/index/index.php | 36 - docu/register_sys_docu.php | 2 - docu/system/1.system.md | 32 - docu/system/2.license.md | 21 - docu/system/3.getting started.md | 86 - docu/system/system.api.md | 69 - docu/system/system.cache.md | 2 - docu/system/system.config.md | 2 - docu/system/system.db.md | 2 - docu/system/system.db.qq.md | 76 - docu/system/system.docu.md | 0 docu/system/system.log.md | 0 docu/system/system.page.md | 0 docu/system/system.sai.md | 0 docu/system/system.security.md | 0 docu/system/system.system.md | 188 - files/autoload.inc.php | 4 - files/files.php | 81 - files/saistart_sys_sai/flag_deDE.png | Bin 545 -> 0 bytes files/saistart_sys_sai/flag_enUS.png | Bin 609 -> 0 bytes files/saistart_sys_sai/flag_esES.png | Bin 469 -> 0 bytes files/saistart_sys_sai/flag_frFR.png | Bin 545 -> 0 bytes files/saistart_sys_sai/flag_jaJA.png | Bin 420 -> 0 bytes files/saistart_sys_sai/flag_trTR.png | Bin 492 -> 0 bytes files/saistart_sys_sai/logo.png | Bin 25432 -> 0 bytes files/sys/system.css | 9 - files/sys/system.js | 164 - lib/EpicEditor/js/epiceditor.js | 2899 -------- lib/EpicEditor/js/epiceditor.min.js | 5 - lib/EpicEditor/themes/base/epiceditor.css | 70 - lib/EpicEditor/themes/editor/epic-dark.css | 13 - lib/EpicEditor/themes/editor/epic-light.css | 12 - lib/EpicEditor/themes/preview/bartik.css | 167 - lib/EpicEditor/themes/preview/github.css | 368 - .../themes/preview/preview-dark.css | 121 - lib/Michelf/Markdown.php | 3096 --------- lib/Michelf/MarkdownExtra.php | 40 - lib/Michelf/extra/License.md | 36 - lib/Michelf/extra/Readme.md | 259 - lib/Michelf/extra/Readme.php | 31 - lib/Michelf/extra/composer.json | 31 - lib/autoload.inc.php | 2 - log/autoload.inc.php | 5 - log/error_handler/error_handler.php | 12 - log/error_handler/error_handler_dbwriter.php | 31 - .../error_handler_jsonoutput.php | 15 - log/exceptions/COUNTER.php | 5 - log/exceptions/CRON.php | 5 - log/exceptions/DEPRECATED.php | 4 - log/exceptions/ERROR.php | 4 - log/exceptions/ERROR_EXCEPTION.php | 4 - log/exceptions/INFO.php | 5 - log/exceptions/SHUTDOWN_EXCEPTION.php | 4 - log/exceptions/SYSTEM_ERROR_EXCEPTION.php | 11 - log/exceptions/SYSTEM_EXCEPTION.php | 12 - log/exceptions/TODO.php | 8 - log/exceptions/TranslatableError.php | 13 - log/exceptions/WARNING.php | 4 - log/exceptions_shortcut/DEPRECATED.php | 2 - log/exceptions_shortcut/ERROR.php | 2 - log/exceptions_shortcut/INFO.php | 3 - log/exceptions_shortcut/TODO.php | 2 - log/exceptions_shortcut/WARNING.php | 2 - log/log.php | 52 - log/register_exception_shortcut.php | 2 - log/register_result_shortcut.php | 2 - log/result/AbstractResult.php | 15 - log/result/JsonResult.php | 54 - log/result_shortcut/JsonResult.php | 3 - page/Page.php | 9 - page/State.php | 27 - page/autoload.inc.php | 2 - page/replace.php | 24 - readme.md | 22 +- sai/autoload.inc.php | 5 - sai/js/crypto/jquery.md5.js | 269 - sai/js/crypto/jquery.sha1.js | 170 - sai/js/jqBootstrapValidation.js | 912 --- sai/modules/autoload.inc | 16 - sai/modules/saimod_sys_api/autoload.inc | 5 - .../saimod_sys_api/css/saimod_sys_api.css | 64 - .../saimod_sys_api/js/saimod_sys_api.js | 97 - .../saimod_sys_api/qq/SYS_SAIMOD_API_ADD.php | 11 - .../saimod_sys_api/qq/SYS_SAIMOD_API_DEL.php | 11 - .../qq/SYS_SAIMOD_API_SINGLE_SELECT.php | 11 - sai/modules/saimod_sys_api/saimod_sys_api.php | 102 - .../saimod_sys_api/tpl/delete_dialog.tpl | 26 - sai/modules/saimod_sys_api/tpl/list_entry.tpl | 9 - sai/modules/saimod_sys_api/tpl/tab.tpl | 14 - sai/modules/saimod_sys_api/tpl/tabopt.tpl | 1 - sai/modules/saimod_sys_api/tpl/tabs.tpl | 36 - sai/modules/saimod_sys_cache/autoload.inc | 5 - sai/modules/saimod_sys_cache/qq/dummy | 0 .../saimod_sys_cache/saimod_sys_cache.php | 48 - sai/modules/saimod_sys_config/autoload.inc | 5 - sai/modules/saimod_sys_config/qq/dummy | 0 .../saimod_sys_config/saimod_sys_config.php | 39 - sai/modules/saimod_sys_cron/autoload.inc | 5 - .../saimod_sys_cron/css/saimod_sys_cron.css | 64 - .../saimod_sys_cron/js/saimod_sys_cron.js | 83 - .../saimod_sys_cron/qq/SYS_SAIMOD_CRON.php | 11 - .../qq/SYS_SAIMOD_CRON_ADD.php | 12 - .../qq/SYS_SAIMOD_CRON_CHANGE.php | 11 - .../qq/SYS_SAIMOD_CRON_DEL.php | 11 - .../qq/SYS_SAIMOD_CRON_SINGLE_SELECT.php | 11 - .../saimod_sys_cron/saimod_sys_cron.php | 50 - .../saimod_sys_cron/tpl/list_entry.tpl | 23 - sai/modules/saimod_sys_cron/tpl/tabs.tpl | 35 - sai/modules/saimod_sys_docu/autoload.inc | 5 - .../saimod_sys_docu/js/saimod_sys_docu.js | 16 - sai/modules/saimod_sys_docu/qq/dummy | 0 .../saimod_sys_docu/saimod_sys_docu.php | 52 - sai/modules/saimod_sys_docu/tpl/tab.tpl | 12 - sai/modules/saimod_sys_docu/tpl/tab2.tpl | 8 - sai/modules/saimod_sys_docu/tpl/tabopt.tpl | 1 - sai/modules/saimod_sys_docu/tpl/tabs.tpl | 10 - sai/modules/saimod_sys_files/autoload.inc | 5 - .../saimod_sys_files/js/saimod_sys_files.js | 59 - sai/modules/saimod_sys_files/qq/dummy | 0 .../saimod_sys_files/saimod_sys_files.php | 52 - .../saimod_sys_files/tpl/saimod_sys_files.tpl | 10 - .../tpl/saimod_sys_files_tab.tpl | 1 - .../tpl/saimod_sys_files_tabfull.tpl | 16 - .../tpl/saimod_sys_files_tableentry.tpl | 12 - .../tpl/saimod_sys_files_tabopt.tpl | 1 - sai/modules/saimod_sys_log/autoload.inc | 5 - .../saimod_sys_log/img/ajax-loader.gif | Bin 723 -> 0 bytes .../saimod_sys_log/js/saimod_sys_log.js | 97 - .../qq/SYS_SAIMOD_LOG_BASIC_QUERYTIME.php | 30 - .../qq/SYS_SAIMOD_LOG_BASIC_SUCCESS.php | 52 - .../qq/SYS_SAIMOD_LOG_BASIC_VISITOR.php | 26 - .../qq/SYS_SAIMOD_LOG_CLASS_BASIC.php | 32 - .../qq/SYS_SAIMOD_LOG_CLASS_OTHER.php | 28 - .../qq/SYS_SAIMOD_LOG_CLASS_SYSTEM.php | 36 - .../qq/SYS_SAIMOD_LOG_ERROR.php | 20 - .../qq/SYS_SAIMOD_LOG_FILTER.php | 21 - .../qq/SYS_SAIMOD_LOG_FILTERS.php | 18 - .../qq/SYS_SAIMOD_LOG_FILTER_COUNT.php | 17 - .../qq/SYS_SAIMOD_LOG_TRUNCATE.php | 12 - .../qq/SYS_SAIMOD_LOG_UNIQUE_BASIC.php | 28 - .../qq/SYS_SAIMOD_LOG_UNIQUE_EXCEPTION.php | 28 - .../qq/SYS_SAIMOD_LOG_UNIQUE_REFERER.php | 30 - .../qq/SYS_SAIMOD_LOG_UNIQUE_REQUEST.php | 30 - sai/modules/saimod_sys_log/saimod_sys_log.php | 352 - .../saimod_sys_log/tpl/saimod_sys_log.tpl | 14 - .../tpl/saimod_sys_log_error.tpl | 23 - .../tpl/saimod_sys_log_filter.tpl | 5 - .../tpl/saimod_sys_log_stats.tpl | 43 - .../tpl/saimod_sys_log_stats_menu.tpl | 1 - .../tpl/saimod_sys_log_table.tpl | 15 - .../tpl/saimod_sys_log_table_row.tpl | 11 - sai/modules/saimod_sys_login/autoload.inc | 5 - .../js/sai_sys_login_submit.js | 92 - sai/modules/saimod_sys_login/qq/dummy | 0 .../saimod_sys_login/saimod_sys_login.php | 58 - sai/modules/saimod_sys_login/tpl/login.tpl | 33 - sai/modules/saimod_sys_login/tpl/logout.tpl | 102 - sai/modules/saimod_sys_login/tpl/register.tpl | 87 - sai/modules/saimod_sys_mod/autoload.inc | 5 - .../saimod_sys_mod/js/saimod_sys_mod.js | 6 - sai/modules/saimod_sys_mod/qq/dummy | 0 sai/modules/saimod_sys_mod/saimod_sys_mod.php | 43 - sai/modules/saimod_sys_mod/tpl/mods.tpl | 12 - sai/modules/saimod_sys_security/autoload.inc | 5 - .../css/saimod_sys_security.css | 3 - .../js/saimod_sys_security.js | 117 - .../qq/SYS_SAIMOD_SECURITY_RIGHTS.php | 12 - .../qq/SYS_SAIMOD_SECURITY_RIGHT_CHECK.php | 14 - .../qq/SYS_SAIMOD_SECURITY_RIGHT_DELETE.php | 14 - .../qq/SYS_SAIMOD_SECURITY_RIGHT_INSERT.php | 14 - .../qq/SYS_SAIMOD_SECURITY_USER.php | 12 - .../qq/SYS_SAIMOD_SECURITY_USERS.php | 11 - .../qq/SYS_SAIMOD_SECURITY_USER_COUNT.php | 12 - .../qq/SYS_SAIMOD_SECURITY_USER_LOG.php | 22 - .../qq/SYS_SAIMOD_SECURITY_USER_LOG_COUNT.php | 17 - .../qq/SYS_SAIMOD_SECURITY_USER_RIGHTS.php | 12 - .../SYS_SAIMOD_SECURITY_USER_RIGHT_CHECK.php | 12 - .../SYS_SAIMOD_SECURITY_USER_RIGHT_DELETE.php | 12 - .../SYS_SAIMOD_SECURITY_USER_RIGHT_INSERT.php | 12 - .../saimod_sys_security.php | 185 - .../tpl/saimod_sys_security.tpl | 17 - .../tpl/saimod_sys_security_deleteright.tpl | 17 - .../tpl/saimod_sys_security_groups.tpl | 1 - .../tpl/saimod_sys_security_newright.tpl | 16 - .../tpl/saimod_sys_security_right.tpl | 8 - .../tpl/saimod_sys_security_rights.tpl | 11 - .../tpl/saimod_sys_security_stats.tpl | 1 - .../tpl/saimod_sys_security_user.tpl | 16 - .../tpl/saimod_sys_security_user_right.tpl | 7 - .../saimod_sys_security_user_right_add.tpl | 1 - .../tpl/saimod_sys_security_user_rights.tpl | 11 - .../saimod_sys_security_user_rights_add.tpl | 4 - .../tpl/saimod_sys_security_user_view.tpl | 40 - .../tpl/saimod_sys_security_users.tpl | 19 - sai/modules/saimod_sys_text/autoload.inc | 5 - .../saimod_sys_text/js/saimod_sys_text.js | 278 - .../qq/SYS_SAIMOD_LOCALE_ADD.php | 11 - .../qq/SYS_SAIMOD_LOCALE_CATEGORY.php | 11 - .../qq/SYS_SAIMOD_LOCALE_DEL.php | 11 - .../qq/SYS_SAIMOD_LOCALE_ID.php | 11 - .../qq/SYS_SAIMOD_LOCALE_SELECT.php | 11 - .../qq/SYS_SAIMOD_LOCALE_SELECT_LANG.php | 11 - .../saimod_sys_text/saimod_sys_text.php | 94 - .../saimod_sys_text/tinymce/LICENSE.TXT | 504 -- .../tinymce/jquery.tinymce.min.js | 1 - .../saimod_sys_text/tinymce/langs/readme.md | 3 - .../tinymce/plugins/advlist/plugin.min.js | 1 - .../tinymce/plugins/anchor/plugin.min.js | 1 - .../tinymce/plugins/autolink/plugin.min.js | 1 - .../tinymce/plugins/autoresize/plugin.min.js | 1 - .../tinymce/plugins/autosave/plugin.min.js | 1 - .../tinymce/plugins/bbcode/plugin.min.js | 1 - .../tinymce/plugins/charmap/plugin.min.js | 1 - .../tinymce/plugins/code/plugin.min.js | 1 - .../tinymce/plugins/contextmenu/plugin.min.js | 1 - .../plugins/directionality/plugin.min.js | 1 - .../plugins/emoticons/img/smiley-cool.gif | Bin 354 -> 0 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 329 -> 0 bytes .../emoticons/img/smiley-embarassed.gif | Bin 331 -> 0 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 342 -> 0 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 340 -> 0 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 336 -> 0 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 338 -> 0 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 343 -> 0 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 321 -> 0 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 323 -> 0 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 344 -> 0 bytes .../emoticons/img/smiley-surprised.gif | Bin 338 -> 0 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 328 -> 0 bytes .../emoticons/img/smiley-undecided.gif | Bin 337 -> 0 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 350 -> 0 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 336 -> 0 bytes .../tinymce/plugins/emoticons/plugin.min.js | 1 - .../tinymce/plugins/example/plugin.min.js | 1 - .../plugins/example_dependency/plugin.min.js | 1 - .../tinymce/plugins/fullpage/plugin.min.js | 1 - .../tinymce/plugins/fullscreen/plugin.min.js | 1 - .../tinymce/plugins/hr/plugin.min.js | 1 - .../tinymce/plugins/image/plugin.min.js | 1 - .../tinymce/plugins/importcss/plugin.min.js | 1 - .../plugins/insertdatetime/plugin.min.js | 1 - .../tinymce/plugins/layer/plugin.min.js | 1 - .../plugins/legacyoutput/plugin.min.js | 1 - .../tinymce/plugins/link/plugin.min.js | 1 - .../tinymce/plugins/lists/plugin.min.js | 1 - .../tinymce/plugins/media/moxieplayer.swf | Bin 20017 -> 0 bytes .../tinymce/plugins/media/plugin.min.js | 1 - .../plugins/moxiemanager/plugin.min.js | 1 - .../tinymce/plugins/nonbreaking/plugin.min.js | 1 - .../tinymce/plugins/noneditable/plugin.min.js | 1 - .../tinymce/plugins/pagebreak/plugin.min.js | 1 - .../tinymce/plugins/paste/plugin.min.js | 1 - .../tinymce/plugins/preview/plugin.min.js | 1 - .../tinymce/plugins/print/plugin.min.js | 1 - .../tinymce/plugins/save/plugin.min.js | 1 - .../plugins/searchreplace/plugin.min.js | 1 - .../plugins/spellchecker/plugin.min.js | 1 - .../tinymce/plugins/tabfocus/plugin.min.js | 1 - .../tinymce/plugins/table/plugin.min.js | 1 - .../tinymce/plugins/template/plugin.min.js | 1 - .../tinymce/plugins/textcolor/plugin.min.js | 1 - .../plugins/visualblocks/css/visualblocks.css | 128 - .../plugins/visualblocks/plugin.min.js | 1 - .../tinymce/plugins/visualchars/plugin.min.js | 1 - .../tinymce/plugins/wordcount/plugin.min.js | 1 - .../skins/lightgray/content.inline.min.css | 1 - .../tinymce/skins/lightgray/content.min.css | 1 - .../skins/lightgray/fonts/icomoon-small.eot | Bin 8344 -> 0 bytes .../skins/lightgray/fonts/icomoon-small.svg | 175 - .../skins/lightgray/fonts/icomoon-small.ttf | Bin 8160 -> 0 bytes .../skins/lightgray/fonts/icomoon-small.woff | Bin 8336 -> 0 bytes .../tinymce/skins/lightgray/fonts/icomoon.eot | Bin 8268 -> 0 bytes .../tinymce/skins/lightgray/fonts/icomoon.svg | 153 - .../tinymce/skins/lightgray/fonts/icomoon.ttf | Bin 8104 -> 0 bytes .../skins/lightgray/fonts/icomoon.woff | Bin 8400 -> 0 bytes .../tinymce/skins/lightgray/fonts/readme.md | 1 - .../tinymce/skins/lightgray/img/anchor.gif | Bin 53 -> 0 bytes .../tinymce/skins/lightgray/img/loader.gif | Bin 2608 -> 0 bytes .../tinymce/skins/lightgray/img/object.gif | Bin 152 -> 0 bytes .../tinymce/skins/lightgray/img/trans.gif | Bin 43 -> 0 bytes .../tinymce/skins/lightgray/img/wline.gif | Bin 46 -> 0 bytes .../skins/lightgray/skin.ie7.min.css.noie | 1 - .../tinymce/skins/lightgray/skin.min.css | 1 - .../tinymce/themes/modern/theme.min.js | 1 - .../saimod_sys_text/tinymce/tinymce.min.js | 9 - sai/modules/saimod_sys_text/tpl/entry.tpl | 4 - sai/modules/saimod_sys_text/tpl/lang_tabs.tpl | 9 - .../saimod_sys_text/tpl/langtabopt.tpl | 1 - sai/modules/saimod_sys_text/tpl/langtabs.tpl | 7 - sai/modules/saimod_sys_text/tpl/tab.tpl | 8 - sai/modules/saimod_sys_text/tpl/tabopt.tpl | 1 - sai/modules/saimod_sys_text/tpl/tabs.tpl | 49 - sai/modules/saimod_sys_todo/autoload.inc | 8 - .../saimod_sys_todo/js/saimod_sys_todo.js | 151 - .../qq/SYS_SAIMOD_TODO_CLOSE.php | 14 - .../qq/SYS_SAIMOD_TODO_CLOSE_ALL.php | 14 - .../qq/SYS_SAIMOD_TODO_DOTO_COUNT.php | 11 - .../qq/SYS_SAIMOD_TODO_DOTO_LIST.php | 17 - .../qq/SYS_SAIMOD_TODO_EDIT.php | 15 - .../qq/SYS_SAIMOD_TODO_EXCEPTION_INSERT.php | 32 - .../qq/SYS_SAIMOD_TODO_OPEN.php | 14 - .../SYS_SAIMOD_TODO_STATS_COUNT_DOTO_GEN.php | 11 - .../SYS_SAIMOD_TODO_STATS_COUNT_DOTO_USER.php | 11 - .../SYS_SAIMOD_TODO_STATS_COUNT_TODO_GEN.php | 11 - .../SYS_SAIMOD_TODO_STATS_COUNT_TODO_USER.php | 11 - .../qq/SYS_SAIMOD_TODO_TODO.php | 20 - .../qq/SYS_SAIMOD_TODO_TODO_COUNT.php | 11 - .../qq/SYS_SAIMOD_TODO_TODO_LIST.php | 17 - .../SYS_SAIMOD_TODO_USER_EXCEPTION_INSERT.php | 33 - .../saimod_sys_todo/saimod_sys_todo.php | 219 - .../saimod_sys_todo/stats/todo_stats_gen.php | 12 - .../saimod_sys_todo/stats/todo_stats_user.php | 12 - sai/modules/saimod_sys_todo/todo_stats.php | 7 - .../saimod_sys_todo/todo_stats_data.php | 14 - .../saimod_sys_todo/tpl/saimod_sys_todo.tpl | 16 - .../tpl/saimod_sys_todo_new.tpl | 5 - .../tpl/saimod_sys_todo_todo.tpl | 26 - .../tpl/saimod_sys_todo_todo_user.tpl | 16 - sai/modules/saimod_sys_todo/tpl/todo_list.tpl | 29 - .../saimod_sys_todo/tpl/todo_list_element.tpl | 12 - .../saimod_sys_todo/tpl/todo_stats.tpl | 15 - .../saimod_sys_todo/tpl/todo_stats_entry.tpl | 6 - .../tpl/todo_user_list_element.tpl | 5 - sai/modules/saistart_sys_sai/autoload.inc | 3 - .../saistart_sys_sai/css/saistart_sys_sai.css | 32 - sai/modules/saistart_sys_sai/img/logo_sai.png | Bin 17526 -> 0 bytes .../saistart_sys_sai/img/saimod_log_stats.png | Bin 221202 -> 0 bytes .../saistart_sys_sai/js/saistart_sys_sai.js | 36 - sai/modules/saistart_sys_sai/qq/dummy | 0 .../saistart_sys_sai/saistart_sys_sai.php | 39 - sai/modules/saistart_sys_sai/tpl/carousel.tpl | 61 - sai/modules/saistart_sys_sai/tpl/content.tpl | 20 - .../saistart_sys_sai/tpl/content_loggedin.tpl | 42 - sai/modules/saistart_sys_sai/tpl/login.tpl | 33 - sai/modules/saistart_sys_sai/tpl/logout.tpl | 11 - sai/modules/saistart_sys_sai/tpl/saistart.tpl | 3 - sai/page/css/libs/bootstrap-responsive.css | 1092 --- .../css/libs/bootstrap-responsive.min.css | 9 - sai/page/css/libs/bootstrap-switch.css | 203 - .../css/libs/bootstrap-timepicker.min.css | 10 - sai/page/css/libs/bootstrap.css | 6039 ----------------- sai/page/css/libs/bootstrap.min.css | 9 - sai/page/css/libs/datepicker.css | 7 - sai/page/css/libs/jquery.miniColors.css | 206 - sai/page/css/libs/jquery.minicolors.png | Bin 77459 -> 0 bytes sai/page/css/sai.css | 40 - sai/page/default_page.php | 76 - sai/page/js/libs/bootstrap-datepicker.js | 454 -- sai/page/js/libs/bootstrap-timepicker.min.js | 6 - sai/page/js/libs/bootstrap.js | 1951 ------ sai/page/js/libs/bootstrap.min.js | 6 - sai/page/js/libs/geoFunctions.js | 70 - sai/page/js/libs/jquery-1.9.1.min.js | 5 - sai/page/js/libs/jquery.min.js | 2 - sai/page/js/libs/jquery.miniColors.js | 729 -- sai/page/js/libs/jquery.switch.js | 209 - .../js/libs/tooltipster-master/.gitignore | 1 - sai/page/js/libs/tooltipster-master/README.md | 59 - .../js/libs/tooltipster-master/bower.json | 8 - .../css/themes/tooltipster-light.css | 12 - .../css/themes/tooltipster-noir.css | 12 - .../css/themes/tooltipster-punk.css | 12 - .../css/themes/tooltipster-shadow.css | 12 - .../tooltipster-master/css/tooltipster.css | 274 - .../libs/tooltipster-master/demo/index.html | 35 - .../js/libs/tooltipster-master/demo/map.png | Bin 6353 -> 0 bytes .../js/libs/tooltipster-master/demo/reset.css | 45 - .../js/libs/tooltipster-master/demo/style.css | 28 - .../tooltipster-master/doc/css/prettify.css | 49 - .../libs/tooltipster-master/doc/css/reset.css | 45 - .../libs/tooltipster-master/doc/css/style.css | 678 -- .../doc/images/browser-chrome.png | Bin 8439 -> 0 bytes .../doc/images/browser-firefox.png | Bin 9351 -> 0 bytes .../doc/images/browser-ie.png | Bin 5305 -> 0 bytes .../doc/images/browser-opera.png | Bin 4585 -> 0 bytes .../doc/images/browser-safari.png | Bin 12435 -> 0 bytes .../tooltipster-master/doc/images/favicon.png | Bin 378 -> 0 bytes .../doc/images/icons/icomoon.eot | Bin 1632 -> 0 bytes .../doc/images/icons/icomoon.svg | 16 - .../doc/images/icons/icomoon.ttf | Bin 1468 -> 0 bytes .../doc/images/icons/icomoon.woff | Bin 1096 -> 0 bytes .../doc/images/icons/icomoond41d.eot | Bin 1632 -> 0 bytes .../doc/images/large-background.jpg | Bin 159444 -> 0 bytes .../doc/images/pattern-navy.png | Bin 119069 -> 0 bytes .../tooltipster-master/doc/images/social.jpg | Bin 14777 -> 0 bytes .../doc/images/spiderman.png | Bin 24528 -> 0 bytes .../doc/images/tooltipster.svg | 212 - .../doc/js/jquery.jgfeed.js | 34 - .../tooltipster-master/doc/js/lang-css.js | 78 - .../tooltipster-master/doc/js/prettify.js | 28 - .../libs/tooltipster-master/doc/js/scripts.js | 119 - .../js/libs/tooltipster-master/index.html | 664 -- .../js/jquery.tooltipster.js | 1276 ---- .../js/jquery.tooltipster.min.js | 1 - .../tooltipster.jquery.json | 36 - sai/page/js/sai.js | 20 - sai/page/tpl/language.tpl | 1 - sai/page/tpl/sai.tpl | 35 - sai/sai/SaiModule.php | 36 - sai/sai/sai.php | 38 - sai/sai/saigui.php | 27 - security/RIGHTS.php | 24 - security/Security.php | 128 - security/User.php | 30 - security/autoload.inc.php | 2 - system/HEADER.php | 41 - system/autoload.inc.php | 2 - system/autoload.php | 92 - system/locale.php | 85 - system/path.php | 36 - system/system.php | 49 - system/time.php | 13 - 531 files changed, 2 insertions(+), 34352 deletions(-) delete mode 100644 .gitignore delete mode 100644 api/api.php delete mode 100644 api/api_default.php delete mode 100644 api/api_login.php delete mode 100644 api/api_system.php delete mode 100644 api/autoload.inc.php delete mode 100644 api/verify.php delete mode 100644 autoload.inc.php delete mode 100644 cache/autoload.inc.php delete mode 100644 cache/cache.php delete mode 100644 config/autoload.inc.php delete mode 100644 config/config.php delete mode 100644 config/config_ids.php delete mode 100644 cron/autoload.inc.php delete mode 100644 cron/cron.php delete mode 100644 cron/cron_cache_delete.php delete mode 100644 cron/cron_log2sqlite.php delete mode 100644 cron/cronjob.php delete mode 100644 cron/cronstatus.php delete mode 100644 cron/crontime.php delete mode 100644 db/autoload.inc.php delete mode 100644 db/connection/Connection.php delete mode 100644 db/connection/ConnectionAMQP.php delete mode 100644 db/connection/ConnectionAbstr.php delete mode 100644 db/connection/ConnectionMYS.php delete mode 100644 db/connection/ConnectionPG.php delete mode 100644 db/connection/ConnectionSQLite.php delete mode 100644 db/dbinfo/DBInfo.php delete mode 100644 db/dbinfo/DBInfoAMQP.php delete mode 100644 db/dbinfo/DBInfoMYS.php delete mode 100644 db/dbinfo/DBInfoPG.php delete mode 100644 db/dbinfo/DBInfoSQLite.php delete mode 100644 db/qq/QP.php delete mode 100644 db/qq/QQ.php delete mode 100644 db/qq/QQuery.php delete mode 100644 db/result/Result.php delete mode 100644 db/result/ResultAMQP.php delete mode 100644 db/result/ResultMysqli.php delete mode 100644 db/result/ResultMysqliPrepare.php delete mode 100644 db/result/ResultPostgres.php delete mode 100644 db/result/ResultSQLite.php delete mode 100644 dbd/autoload.inc.php delete mode 100644 dbd/qq/SYS_API_TREE.php delete mode 100644 dbd/qq/SYS_CACHE_CHECK.php delete mode 100644 dbd/qq/SYS_CACHE_DELETE.php delete mode 100644 dbd/qq/SYS_CACHE_DELETE_ALL.php delete mode 100644 dbd/qq/SYS_CACHE_PUT.php delete mode 100644 dbd/qq/SYS_CRON_GET.php delete mode 100644 dbd/qq/SYS_CRON_LAST_VISIT.php delete mode 100644 dbd/qq/SYS_CRON_LIST.php delete mode 100644 dbd/qq/SYS_CRON_UPD.php delete mode 100644 dbd/qq/SYS_LOCALE_SET_LOCALE.php delete mode 100644 dbd/qq/SYS_LOG_DEL.php delete mode 100644 dbd/qq/SYS_LOG_INSERT.php delete mode 100644 dbd/qq/SYS_LOG_MONTH.php delete mode 100644 dbd/qq/SYS_LOG_MONTH_DEL.php delete mode 100644 dbd/qq/SYS_LOG_OLDEST.php delete mode 100644 dbd/qq/SYS_PAGE_GROUP.php delete mode 100644 dbd/qq/SYS_SECURITY_AVAILABLE.php delete mode 100644 dbd/qq/SYS_SECURITY_CHECK.php delete mode 100644 dbd/qq/SYS_SECURITY_CREATE.php delete mode 100644 dbd/qq/SYS_SECURITY_LOGIN_MD5.php delete mode 100644 dbd/qq/SYS_SECURITY_LOGIN_SHA1.php delete mode 100644 dbd/qq/SYS_SECURITY_UPDATE_LASTACTIVE.php delete mode 100644 dbd/qq/SYS_SECURITY_UPDATE_PW.php delete mode 100644 dbd/sql/mysql/data/basic_locale_string.sql delete mode 100644 dbd/sql/mysql/data/sai_api.sql delete mode 100644 dbd/sql/mysql/data/sai_error_locale_string.sql delete mode 100644 dbd/sql/mysql/data/sai_locale_string.sql delete mode 100644 dbd/sql/mysql/data/system_api.sql delete mode 100644 dbd/sql/mysql/data/system_api_default.sql delete mode 100644 dbd/sql/mysql/data/system_cron.sql delete mode 100644 dbd/sql/mysql/data/system_page.sql delete mode 100644 dbd/sql/mysql/data/system_rights.sql delete mode 100644 dbd/sql/mysql/schema/system_api.sql delete mode 100644 dbd/sql/mysql/schema/system_cache.sql delete mode 100644 dbd/sql/mysql/schema/system_cron.sql delete mode 100644 dbd/sql/mysql/schema/system_locale_string.sql delete mode 100644 dbd/sql/mysql/schema/system_log.sql delete mode 100644 dbd/sql/mysql/schema/system_page.sql delete mode 100644 dbd/sql/mysql/schema/system_rights.sql delete mode 100644 dbd/sql/mysql/schema/system_todo.sql delete mode 100644 dbd/sql/mysql/schema/system_user.sql delete mode 100644 dbd/sql/mysql/schema/system_user_to_rights.sql delete mode 100644 dbd/sql/pg/data/basic_locale_string.sql delete mode 100644 dbd/sql/pg/data/sai_api.sql delete mode 100644 dbd/sql/pg/data/sai_error_locale_string.sql delete mode 100644 dbd/sql/pg/data/sai_locale_string.sql delete mode 100644 dbd/sql/pg/data/system_api.sql delete mode 100644 dbd/sql/pg/data/system_cron.sql delete mode 100644 dbd/sql/pg/data/system_rights.sql delete mode 100644 dbd/sql/pg/schema/schema.sql delete mode 100644 dbd/sql/pg/schema/system_api.sql delete mode 100644 dbd/sql/pg/schema/system_cache.sql delete mode 100644 dbd/sql/pg/schema/system_cron.sql delete mode 100644 dbd/sql/pg/schema/system_locale_string.sql delete mode 100644 dbd/sql/pg/schema/system_log.sql delete mode 100644 dbd/sql/pg/schema/system_rights.sql delete mode 100644 dbd/sql/pg/schema/system_todo.sql delete mode 100644 dbd/sql/pg/schema/system_user.sql delete mode 100644 dbd/sql/pg/schema/system_user_to_rights.sql delete mode 100644 dbd/sql/pg/util_copy_api_table_by_groupa.sql delete mode 100644 dbd/tbl/UserLoginsTable.php delete mode 100644 dbd/tbl/UserRightsTable.php delete mode 100644 dbd/tbl/system_api.php delete mode 100644 dbd/tbl/system_cron.php delete mode 100644 dbd/tbl/system_locale_string.php delete mode 100644 dbd/tbl/system_log.php delete mode 100644 dbd/tbl/system_page.php delete mode 100644 dbd/tbl/system_todo.php delete mode 100644 dbd/tbl/system_user.php delete mode 100644 docu/apiclass/ApiClass.php delete mode 100644 docu/apiclass/ApiVerify.php delete mode 100644 docu/apiclass/PageApi.php delete mode 100644 docu/autoload.inc.php delete mode 100644 docu/code_docu.php delete mode 100644 docu/docu.php delete mode 100644 docu/docu_categories.php delete mode 100644 docu/index/api.php delete mode 100644 docu/index/index.php delete mode 100644 docu/register_sys_docu.php delete mode 100644 docu/system/1.system.md delete mode 100644 docu/system/2.license.md delete mode 100644 docu/system/3.getting started.md delete mode 100644 docu/system/system.api.md delete mode 100644 docu/system/system.cache.md delete mode 100644 docu/system/system.config.md delete mode 100644 docu/system/system.db.md delete mode 100644 docu/system/system.db.qq.md delete mode 100644 docu/system/system.docu.md delete mode 100644 docu/system/system.log.md delete mode 100644 docu/system/system.page.md delete mode 100644 docu/system/system.sai.md delete mode 100644 docu/system/system.security.md delete mode 100644 docu/system/system.system.md delete mode 100644 files/autoload.inc.php delete mode 100644 files/files.php delete mode 100644 files/saistart_sys_sai/flag_deDE.png delete mode 100644 files/saistart_sys_sai/flag_enUS.png delete mode 100644 files/saistart_sys_sai/flag_esES.png delete mode 100644 files/saistart_sys_sai/flag_frFR.png delete mode 100644 files/saistart_sys_sai/flag_jaJA.png delete mode 100644 files/saistart_sys_sai/flag_trTR.png delete mode 100644 files/saistart_sys_sai/logo.png delete mode 100644 files/sys/system.css delete mode 100644 files/sys/system.js delete mode 100644 lib/EpicEditor/js/epiceditor.js delete mode 100644 lib/EpicEditor/js/epiceditor.min.js delete mode 100644 lib/EpicEditor/themes/base/epiceditor.css delete mode 100644 lib/EpicEditor/themes/editor/epic-dark.css delete mode 100644 lib/EpicEditor/themes/editor/epic-light.css delete mode 100644 lib/EpicEditor/themes/preview/bartik.css delete mode 100644 lib/EpicEditor/themes/preview/github.css delete mode 100644 lib/EpicEditor/themes/preview/preview-dark.css delete mode 100644 lib/Michelf/Markdown.php delete mode 100644 lib/Michelf/MarkdownExtra.php delete mode 100644 lib/Michelf/extra/License.md delete mode 100644 lib/Michelf/extra/Readme.md delete mode 100644 lib/Michelf/extra/Readme.php delete mode 100644 lib/Michelf/extra/composer.json delete mode 100644 lib/autoload.inc.php delete mode 100644 log/autoload.inc.php delete mode 100644 log/error_handler/error_handler.php delete mode 100644 log/error_handler/error_handler_dbwriter.php delete mode 100644 log/error_handler/error_handler_jsonoutput.php delete mode 100644 log/exceptions/COUNTER.php delete mode 100644 log/exceptions/CRON.php delete mode 100644 log/exceptions/DEPRECATED.php delete mode 100644 log/exceptions/ERROR.php delete mode 100644 log/exceptions/ERROR_EXCEPTION.php delete mode 100644 log/exceptions/INFO.php delete mode 100644 log/exceptions/SHUTDOWN_EXCEPTION.php delete mode 100644 log/exceptions/SYSTEM_ERROR_EXCEPTION.php delete mode 100644 log/exceptions/SYSTEM_EXCEPTION.php delete mode 100644 log/exceptions/TODO.php delete mode 100644 log/exceptions/TranslatableError.php delete mode 100644 log/exceptions/WARNING.php delete mode 100644 log/exceptions_shortcut/DEPRECATED.php delete mode 100644 log/exceptions_shortcut/ERROR.php delete mode 100644 log/exceptions_shortcut/INFO.php delete mode 100644 log/exceptions_shortcut/TODO.php delete mode 100644 log/exceptions_shortcut/WARNING.php delete mode 100644 log/log.php delete mode 100644 log/register_exception_shortcut.php delete mode 100644 log/register_result_shortcut.php delete mode 100644 log/result/AbstractResult.php delete mode 100644 log/result/JsonResult.php delete mode 100644 log/result_shortcut/JsonResult.php delete mode 100644 page/Page.php delete mode 100644 page/State.php delete mode 100644 page/autoload.inc.php delete mode 100644 page/replace.php delete mode 100644 sai/autoload.inc.php delete mode 100644 sai/js/crypto/jquery.md5.js delete mode 100644 sai/js/crypto/jquery.sha1.js delete mode 100644 sai/js/jqBootstrapValidation.js delete mode 100644 sai/modules/autoload.inc delete mode 100644 sai/modules/saimod_sys_api/autoload.inc delete mode 100644 sai/modules/saimod_sys_api/css/saimod_sys_api.css delete mode 100644 sai/modules/saimod_sys_api/js/saimod_sys_api.js delete mode 100644 sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_ADD.php delete mode 100644 sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_DEL.php delete mode 100644 sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_SINGLE_SELECT.php delete mode 100644 sai/modules/saimod_sys_api/saimod_sys_api.php delete mode 100644 sai/modules/saimod_sys_api/tpl/delete_dialog.tpl delete mode 100644 sai/modules/saimod_sys_api/tpl/list_entry.tpl delete mode 100644 sai/modules/saimod_sys_api/tpl/tab.tpl delete mode 100644 sai/modules/saimod_sys_api/tpl/tabopt.tpl delete mode 100644 sai/modules/saimod_sys_api/tpl/tabs.tpl delete mode 100644 sai/modules/saimod_sys_cache/autoload.inc delete mode 100644 sai/modules/saimod_sys_cache/qq/dummy delete mode 100644 sai/modules/saimod_sys_cache/saimod_sys_cache.php delete mode 100644 sai/modules/saimod_sys_config/autoload.inc delete mode 100644 sai/modules/saimod_sys_config/qq/dummy delete mode 100644 sai/modules/saimod_sys_config/saimod_sys_config.php delete mode 100644 sai/modules/saimod_sys_cron/autoload.inc delete mode 100644 sai/modules/saimod_sys_cron/css/saimod_sys_cron.css delete mode 100644 sai/modules/saimod_sys_cron/js/saimod_sys_cron.js delete mode 100644 sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON.php delete mode 100644 sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON_ADD.php delete mode 100644 sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON_CHANGE.php delete mode 100644 sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON_DEL.php delete mode 100644 sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON_SINGLE_SELECT.php delete mode 100644 sai/modules/saimod_sys_cron/saimod_sys_cron.php delete mode 100644 sai/modules/saimod_sys_cron/tpl/list_entry.tpl delete mode 100644 sai/modules/saimod_sys_cron/tpl/tabs.tpl delete mode 100644 sai/modules/saimod_sys_docu/autoload.inc delete mode 100644 sai/modules/saimod_sys_docu/js/saimod_sys_docu.js delete mode 100644 sai/modules/saimod_sys_docu/qq/dummy delete mode 100644 sai/modules/saimod_sys_docu/saimod_sys_docu.php delete mode 100644 sai/modules/saimod_sys_docu/tpl/tab.tpl delete mode 100644 sai/modules/saimod_sys_docu/tpl/tab2.tpl delete mode 100644 sai/modules/saimod_sys_docu/tpl/tabopt.tpl delete mode 100644 sai/modules/saimod_sys_docu/tpl/tabs.tpl delete mode 100644 sai/modules/saimod_sys_files/autoload.inc delete mode 100644 sai/modules/saimod_sys_files/js/saimod_sys_files.js delete mode 100644 sai/modules/saimod_sys_files/qq/dummy delete mode 100644 sai/modules/saimod_sys_files/saimod_sys_files.php delete mode 100644 sai/modules/saimod_sys_files/tpl/saimod_sys_files.tpl delete mode 100644 sai/modules/saimod_sys_files/tpl/saimod_sys_files_tab.tpl delete mode 100644 sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabfull.tpl delete mode 100644 sai/modules/saimod_sys_files/tpl/saimod_sys_files_tableentry.tpl delete mode 100644 sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabopt.tpl delete mode 100644 sai/modules/saimod_sys_log/autoload.inc delete mode 100644 sai/modules/saimod_sys_log/img/ajax-loader.gif delete mode 100644 sai/modules/saimod_sys_log/js/saimod_sys_log.js delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_BASIC_QUERYTIME.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_BASIC_SUCCESS.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_BASIC_VISITOR.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_CLASS_BASIC.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_CLASS_OTHER.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_CLASS_SYSTEM.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_ERROR.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_FILTER.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_FILTERS.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_FILTER_COUNT.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_TRUNCATE.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_UNIQUE_BASIC.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_UNIQUE_EXCEPTION.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_UNIQUE_REFERER.php delete mode 100644 sai/modules/saimod_sys_log/qq/SYS_SAIMOD_LOG_UNIQUE_REQUEST.php delete mode 100644 sai/modules/saimod_sys_log/saimod_sys_log.php delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_error.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_filter.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats_menu.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_table.tpl delete mode 100644 sai/modules/saimod_sys_log/tpl/saimod_sys_log_table_row.tpl delete mode 100644 sai/modules/saimod_sys_login/autoload.inc delete mode 100644 sai/modules/saimod_sys_login/js/sai_sys_login_submit.js delete mode 100644 sai/modules/saimod_sys_login/qq/dummy delete mode 100644 sai/modules/saimod_sys_login/saimod_sys_login.php delete mode 100644 sai/modules/saimod_sys_login/tpl/login.tpl delete mode 100644 sai/modules/saimod_sys_login/tpl/logout.tpl delete mode 100644 sai/modules/saimod_sys_login/tpl/register.tpl delete mode 100644 sai/modules/saimod_sys_mod/autoload.inc delete mode 100644 sai/modules/saimod_sys_mod/js/saimod_sys_mod.js delete mode 100644 sai/modules/saimod_sys_mod/qq/dummy delete mode 100644 sai/modules/saimod_sys_mod/saimod_sys_mod.php delete mode 100644 sai/modules/saimod_sys_mod/tpl/mods.tpl delete mode 100644 sai/modules/saimod_sys_security/autoload.inc delete mode 100644 sai/modules/saimod_sys_security/css/saimod_sys_security.css delete mode 100644 sai/modules/saimod_sys_security/js/saimod_sys_security.js delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_RIGHTS.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_RIGHT_CHECK.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_RIGHT_DELETE.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_RIGHT_INSERT.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USERS.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_COUNT.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_LOG.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_LOG_COUNT.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_RIGHTS.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_RIGHT_CHECK.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_RIGHT_DELETE.php delete mode 100644 sai/modules/saimod_sys_security/qq/SYS_SAIMOD_SECURITY_USER_RIGHT_INSERT.php delete mode 100644 sai/modules/saimod_sys_security/saimod_sys_security.php delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_deleteright.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_groups.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_newright.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_right.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_rights.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_stats.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user_right.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user_right_add.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user_rights.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user_rights_add.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_user_view.tpl delete mode 100644 sai/modules/saimod_sys_security/tpl/saimod_sys_security_users.tpl delete mode 100644 sai/modules/saimod_sys_text/autoload.inc delete mode 100644 sai/modules/saimod_sys_text/js/saimod_sys_text.js delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_ADD.php delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_CATEGORY.php delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_DEL.php delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_ID.php delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_SELECT.php delete mode 100644 sai/modules/saimod_sys_text/qq/SYS_SAIMOD_LOCALE_SELECT_LANG.php delete mode 100644 sai/modules/saimod_sys_text/saimod_sys_text.php delete mode 100644 sai/modules/saimod_sys_text/tinymce/LICENSE.TXT delete mode 100644 sai/modules/saimod_sys_text/tinymce/jquery.tinymce.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/langs/readme.md delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/advlist/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/anchor/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/autolink/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/autosave/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/charmap/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/code/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/directionality/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-cool.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-cry.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-embarassed.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-frown.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-innocent.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-kiss.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-laughing.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-money-mouth.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-sealed.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-smile.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-surprised.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-tongue-out.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-undecided.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-wink.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/img/smiley-yell.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/example/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/example_dependency/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/hr/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/image/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/importcss/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/layer/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/link/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/lists/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/media/moxieplayer.swf delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/media/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/moxiemanager/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/paste/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/preview/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/print/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/save/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/table/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/template/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/visualblocks/css/visualblocks.css delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/content.inline.min.css delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/content.min.css delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon-small.eot delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon-small.svg delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon-small.ttf delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon-small.woff delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon.eot delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon.svg delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon.ttf delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/icomoon.woff delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/fonts/readme.md delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/img/anchor.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/img/loader.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/img/object.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/img/trans.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/img/wline.gif delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/skin.ie7.min.css.noie delete mode 100644 sai/modules/saimod_sys_text/tinymce/skins/lightgray/skin.min.css delete mode 100644 sai/modules/saimod_sys_text/tinymce/themes/modern/theme.min.js delete mode 100644 sai/modules/saimod_sys_text/tinymce/tinymce.min.js delete mode 100644 sai/modules/saimod_sys_text/tpl/entry.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/lang_tabs.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/langtabopt.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/langtabs.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/tab.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/tabopt.tpl delete mode 100644 sai/modules/saimod_sys_text/tpl/tabs.tpl delete mode 100644 sai/modules/saimod_sys_todo/autoload.inc delete mode 100644 sai/modules/saimod_sys_todo/js/saimod_sys_todo.js delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_CLOSE.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_CLOSE_ALL.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_DOTO_COUNT.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_DOTO_LIST.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_EDIT.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_EXCEPTION_INSERT.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_OPEN.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_STATS_COUNT_DOTO_GEN.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_STATS_COUNT_DOTO_USER.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_STATS_COUNT_TODO_GEN.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_STATS_COUNT_TODO_USER.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_TODO.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_TODO_COUNT.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_TODO_LIST.php delete mode 100644 sai/modules/saimod_sys_todo/qq/SYS_SAIMOD_TODO_USER_EXCEPTION_INSERT.php delete mode 100644 sai/modules/saimod_sys_todo/saimod_sys_todo.php delete mode 100644 sai/modules/saimod_sys_todo/stats/todo_stats_gen.php delete mode 100644 sai/modules/saimod_sys_todo/stats/todo_stats_user.php delete mode 100644 sai/modules/saimod_sys_todo/todo_stats.php delete mode 100644 sai/modules/saimod_sys_todo/todo_stats_data.php delete mode 100644 sai/modules/saimod_sys_todo/tpl/saimod_sys_todo.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_new.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/todo_list.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/todo_list_element.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/todo_stats.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/todo_stats_entry.tpl delete mode 100644 sai/modules/saimod_sys_todo/tpl/todo_user_list_element.tpl delete mode 100644 sai/modules/saistart_sys_sai/autoload.inc delete mode 100644 sai/modules/saistart_sys_sai/css/saistart_sys_sai.css delete mode 100644 sai/modules/saistart_sys_sai/img/logo_sai.png delete mode 100644 sai/modules/saistart_sys_sai/img/saimod_log_stats.png delete mode 100644 sai/modules/saistart_sys_sai/js/saistart_sys_sai.js delete mode 100644 sai/modules/saistart_sys_sai/qq/dummy delete mode 100644 sai/modules/saistart_sys_sai/saistart_sys_sai.php delete mode 100644 sai/modules/saistart_sys_sai/tpl/carousel.tpl delete mode 100644 sai/modules/saistart_sys_sai/tpl/content.tpl delete mode 100644 sai/modules/saistart_sys_sai/tpl/content_loggedin.tpl delete mode 100644 sai/modules/saistart_sys_sai/tpl/login.tpl delete mode 100644 sai/modules/saistart_sys_sai/tpl/logout.tpl delete mode 100644 sai/modules/saistart_sys_sai/tpl/saistart.tpl delete mode 100644 sai/page/css/libs/bootstrap-responsive.css delete mode 100644 sai/page/css/libs/bootstrap-responsive.min.css delete mode 100644 sai/page/css/libs/bootstrap-switch.css delete mode 100644 sai/page/css/libs/bootstrap-timepicker.min.css delete mode 100644 sai/page/css/libs/bootstrap.css delete mode 100644 sai/page/css/libs/bootstrap.min.css delete mode 100644 sai/page/css/libs/datepicker.css delete mode 100644 sai/page/css/libs/jquery.miniColors.css delete mode 100644 sai/page/css/libs/jquery.minicolors.png delete mode 100644 sai/page/css/sai.css delete mode 100644 sai/page/default_page.php delete mode 100644 sai/page/js/libs/bootstrap-datepicker.js delete mode 100644 sai/page/js/libs/bootstrap-timepicker.min.js delete mode 100644 sai/page/js/libs/bootstrap.js delete mode 100644 sai/page/js/libs/bootstrap.min.js delete mode 100644 sai/page/js/libs/geoFunctions.js delete mode 100644 sai/page/js/libs/jquery-1.9.1.min.js delete mode 100644 sai/page/js/libs/jquery.min.js delete mode 100644 sai/page/js/libs/jquery.miniColors.js delete mode 100644 sai/page/js/libs/jquery.switch.js delete mode 100644 sai/page/js/libs/tooltipster-master/.gitignore delete mode 100644 sai/page/js/libs/tooltipster-master/README.md delete mode 100644 sai/page/js/libs/tooltipster-master/bower.json delete mode 100644 sai/page/js/libs/tooltipster-master/css/themes/tooltipster-light.css delete mode 100644 sai/page/js/libs/tooltipster-master/css/themes/tooltipster-noir.css delete mode 100644 sai/page/js/libs/tooltipster-master/css/themes/tooltipster-punk.css delete mode 100644 sai/page/js/libs/tooltipster-master/css/themes/tooltipster-shadow.css delete mode 100644 sai/page/js/libs/tooltipster-master/css/tooltipster.css delete mode 100644 sai/page/js/libs/tooltipster-master/demo/index.html delete mode 100644 sai/page/js/libs/tooltipster-master/demo/map.png delete mode 100644 sai/page/js/libs/tooltipster-master/demo/reset.css delete mode 100644 sai/page/js/libs/tooltipster-master/demo/style.css delete mode 100644 sai/page/js/libs/tooltipster-master/doc/css/prettify.css delete mode 100644 sai/page/js/libs/tooltipster-master/doc/css/reset.css delete mode 100644 sai/page/js/libs/tooltipster-master/doc/css/style.css delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/browser-chrome.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/browser-firefox.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/browser-ie.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/browser-opera.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/browser-safari.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/favicon.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/icons/icomoon.eot delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/icons/icomoon.svg delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/icons/icomoon.ttf delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/icons/icomoon.woff delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/icons/icomoond41d.eot delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/large-background.jpg delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/pattern-navy.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/social.jpg delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/spiderman.png delete mode 100644 sai/page/js/libs/tooltipster-master/doc/images/tooltipster.svg delete mode 100644 sai/page/js/libs/tooltipster-master/doc/js/jquery.jgfeed.js delete mode 100644 sai/page/js/libs/tooltipster-master/doc/js/lang-css.js delete mode 100644 sai/page/js/libs/tooltipster-master/doc/js/prettify.js delete mode 100644 sai/page/js/libs/tooltipster-master/doc/js/scripts.js delete mode 100644 sai/page/js/libs/tooltipster-master/index.html delete mode 100644 sai/page/js/libs/tooltipster-master/js/jquery.tooltipster.js delete mode 100644 sai/page/js/libs/tooltipster-master/js/jquery.tooltipster.min.js delete mode 100644 sai/page/js/libs/tooltipster-master/tooltipster.jquery.json delete mode 100644 sai/page/js/sai.js delete mode 100644 sai/page/tpl/language.tpl delete mode 100644 sai/page/tpl/sai.tpl delete mode 100644 sai/sai/SaiModule.php delete mode 100644 sai/sai/sai.php delete mode 100644 sai/sai/saigui.php delete mode 100644 security/RIGHTS.php delete mode 100644 security/Security.php delete mode 100644 security/User.php delete mode 100644 security/autoload.inc.php delete mode 100644 system/HEADER.php delete mode 100644 system/autoload.inc.php delete mode 100644 system/autoload.php delete mode 100644 system/locale.php delete mode 100644 system/path.php delete mode 100644 system/system.php delete mode 100644 system/time.php diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4b3cc92..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/nbproject/private/ -/nbproject/ -/sai/modules/saimod_sys_img/nbproject/private/ \ No newline at end of file diff --git a/api/api.php b/api/api.php deleted file mode 100644 index 612c370..0000000 --- a/api/api.php +++ /dev/null @@ -1,219 +0,0 @@ -loadHTML(static::default_page($_escaped_fragment_)); - $state = \SYSTEM\PAGE\State::get(static::get_apigroup(), $_escaped_fragment_,false); - foreach($state as $row){ - $frag = new \DOMDocument(); - parse_str(\parse_url($row['url'],PHP_URL_QUERY), $params); - $class = static::get_class($params); - if($class){ - $frag->loadHTML(\SYSTEM\API\api::run('\SYSTEM\API\verify', $class, static::get_params($params), static::get_apigroup(), true, false)); - $html->getElementById(substr($row['div'], 1))->appendChild($html->importNode($frag->documentElement, true)); - //Load subpage css - foreach($row['css'] as $css){ - $css_frag = new \DOMDocument(); - $css_frag->loadHTML(''); - $html->getElementsByTagName('head')[0]->appendChild($html->importNode($css_frag->documentElement,true)); - } - } - } - echo $html->saveHTML(); - new \SYSTEM\LOG\COUNTER("API was called sucessfully."); - die(); - } - public static function get_apigroup(){ - throw new \RuntimeException("Unimplemented");} - public static function get_class($params = null){ - return self::class;} - public static function get_params($params){ - return $params;} - - public static function default_page($_escaped_fragment_ = null){ - throw new \RuntimeException("Unimplemented");} -} \ No newline at end of file diff --git a/api/api_login.php b/api/api_login.php deleted file mode 100644 index 91918a3..0000000 --- a/api/api_login.php +++ /dev/null @@ -1,30 +0,0 @@ - 0 ? true : false) : false;} - public static function UINT0 ($param) {return \is_numeric($param) ? ((int)$param >= 0 ? true : false) : false;} - public static function INT ($param) {return \is_numeric($param);} - public static function TIMEUNIX ($param) {return \is_numeric($param) ? ((int)$param > 0 ? true : false) : false;} - public static function DATE ($param) {return \strtotime($param);} - public static function STRING ($param) {return \is_string($param);} - public static function BOOL ($param) {return \is_bool($param) || $param == '0' || $param == '1';} - public static function FLOAT ($param) {return \is_float(\floatval($param));} - public static function JSON ($param) {return (self::ARY($param) || \json_decode(\stripslashes($param))) ? true : false;} //ary cuz when sent via direct json, all json is alrdy converted to an array. - public static function ARY ($param) {return \is_array($param);} - public static function LANG ($param) {return \SYSTEM\locale::isLang($param);} - public static function RESULT ($param) {return ($param == 'json' || $param == 'msgpack');} - -}; \ No newline at end of file diff --git a/autoload.inc.php b/autoload.inc.php deleted file mode 100644 index 3cf27a1..0000000 --- a/autoload.inc.php +++ /dev/null @@ -1,23 +0,0 @@ -next()){ - //check module - if(!self::check($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS])){ - self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], \SYSTEM\CRON\cronstatus::CRON_STATUS_FAIL_CLASS); - continue;} - //time to execute? - if(!\SYSTEM\CRON\crontime::check_now( strtotime($cron[\SYSTEM\DBD\system_cron::FIELD_LAST_RUN]), - $cron[\SYSTEM\DBD\system_cron::FIELD_MIN], - $cron[\SYSTEM\DBD\system_cron::FIELD_HOUR], - $cron[\SYSTEM\DBD\system_cron::FIELD_DAY], - $cron[\SYSTEM\DBD\system_cron::FIELD_DAY_WEEK], - $cron[\SYSTEM\DBD\system_cron::FIELD_MONTH])){ - continue;} - //Status is ok? - if($cron[\SYSTEM\DBD\system_cron::FIELD_STATUS] != \SYSTEM\CRON\cronstatus::CRON_STATUS_SUCCESFULLY){ - new \SYSTEM\LOG\CRON('Cron for Class '.$cron[\SYSTEM\DBD\system_cron::FIELD_CLASS].' could not execute cuz Status aint good: '. \SYSTEM\CRON\cronstatus::text($cron[\SYSTEM\DBD\system_cron::FIELD_STATUS])); - continue;} - //set running - self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], \SYSTEM\CRON\cronstatus::CRON_STATUS_RUNNING); - self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], call_user_func(array($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS],'run'))); - } - return \SYSTEM\LOG\JsonResult::ok(); - } - - public static function next($class){ - $cron = \SYSTEM\DBD\SYS_CRON_GET::Q1(array($class)); - //check module - if(!self::check($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS])){ - throw new \SYSTEM\LOG\ERROR("Given class is not a cronjob");} - //time - return \SYSTEM\CRON\crontime::next( strtotime($cron[\SYSTEM\DBD\system_cron::FIELD_LAST_RUN]), - $cron[\SYSTEM\DBD\system_cron::FIELD_MIN], - $cron[\SYSTEM\DBD\system_cron::FIELD_HOUR], - $cron[\SYSTEM\DBD\system_cron::FIELD_DAY], - $cron[\SYSTEM\DBD\system_cron::FIELD_DAY_WEEK], - $cron[\SYSTEM\DBD\system_cron::FIELD_MONTH]); - } - - private static function status($class, $status){ - new \SYSTEM\LOG\CRON('Cron Status for Class '.$class.' updated to: '. \SYSTEM\CRON\cronstatus::text($status)); - return \SYSTEM\DBD\SYS_CRON_UPD::QI(array($status,time(),$class));} - - public static function last_visit(){ - return \SYSTEM\DBD\SYS_CRON_LAST_VISIT::Q1()['time'];} -} \ No newline at end of file diff --git a/cron/cron_cache_delete.php b/cron/cron_cache_delete.php deleted file mode 100644 index 6b14080..0000000 --- a/cron/cron_cache_delete.php +++ /dev/null @@ -1,9 +0,0 @@ - abort - if( $oldest['year'] >= $now_year && - $oldest['month'] >= $now_month){ - return cronstatus::CRON_STATUS_SUCCESFULLY;} - $filename = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$oldest['year'].'.'.$oldest['month'].'.db'; - //extract whole month to file - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite($filename)); - //create table - $con->query('CREATE TABLE IF NOT EXISTS `system_log` ('. - ' `ID` INT(10) NOT NULL,'. - ' `class` TEXT NOT NULL,'. - ' `message` TEXT NOT NULL,'. - ' `code` INT(11) NOT NULL,'. - ' `file` TEXT NOT NULL,'. - ' `line` INT(11) NOT NULL,'. - ' `trace` TEXT NOT NULL,'. - ' `ip` TEXT NOT NULL,'. - ' `querytime` DOUBLE NOT NULL,'. - ' `time` DATETIME NOT NULL,'. - ' `server_name` CHAR(255) NOT NULL,'. - ' `server_port` INT(10) NOT NULL,'. - ' `request_uri` CHAR(255) NOT NULL,'. - ' `post` TEXT NOT NULL,'. - ' `http_referer` CHAR(255) NULL DEFAULT NULL,'. - ' `http_user_agent` TEXT NOT NULL,'. - ' `user` INT(11) NULL DEFAULT NULL,'. - ' `thrown` BIT(1) NOT NULL,'. - ' PRIMARY KEY (`ID`)'.');'); - - //write data as trasaction - $con->exec('begin transaction'); - set_time_limit(30); - $res = \SYSTEM\DBD\SYS_LOG_MONTH::QQ(array($oldest['month'],$oldest['year'])); - while($row = $res->next()){ - set_time_limit(30); - $row['time'] = array_key_exists('time_pg', $row) ? date("Y-m-d H:i:s", $row['time_pg']) : $row['time']; - if(!$con->exec('INSERT OR IGNORE INTO '.\SYSTEM\DBD\system_log::NAME_MYS. - '(`ID`, `class`, `message`, `code`, `file`, `line`, `trace`, `ip`, `querytime`, `time`,'. - ' `server_name`, `server_port`, `request_uri`, `post`,'. - ' `http_referer`, `http_user_agent`, `user`, `thrown`)'. - 'VALUES ('.$row['ID'].', \''.\SQLite3::escapeString($row['class']).'\', \''.\SQLite3::escapeString($row['message']).'\', '. - $row['code'].', \''.\SQLite3::escapeString($row['file']).'\', '.$row['line'].', \''.\SQLite3::escapeString($row['trace']).'\', \''. - $row['ip'].'\', '.$row['querytime'].', \''.$row['time'].'\', \''. - \SQLite3::escapeString($row['server_name']).'\', '.($row['server_port'] ? $row['server_port'] : 'NULL').', \''.\SQLite3::escapeString($row['request_uri']).'\', \''.\SQLite3::escapeString($row['post']).'\', \''. - \SQLite3::escapeString($row['http_referer']).'\', \''.\SQLite3::escapeString($row['http_user_agent']).'\', '.($row['user'] ? $row['user'] : 'NULL').','.true.');')){ - new \SYSTEM\LOG\ERROR('failed to insert into log archiev'); - return cronstatus::CRON_STATUS_FAIL; - } - //Delete single - if(!\SYSTEM\DBD\SYS_LOG_DEL::QI(array($row['ID']))){ - new \SYSTEM\LOG\ERROR('failed to delete log entries'); - return cronstatus::CRON_STATUS_FAIL;} - } - set_time_limit(30); - if(!$con->exec('end transaction')){ - new \SYSTEM\LOG\ERROR('failed to insert into log archiev'); - return cronstatus::CRON_STATUS_FAIL;}; - - return cronstatus::CRON_STATUS_SUCCESFULLY; - } -} \ No newline at end of file diff --git a/cron/cronjob.php b/cron/cronjob.php deleted file mode 100644 index da27e93..0000000 --- a/cron/cronjob.php +++ /dev/null @@ -1,6 +0,0 @@ - 12){ $next_year += 1;} - $next_month = ($now_month+$month)%12;} - if($day){ - if($day + $now_day> 31){ $next_month += 1;} - $next_day = ($now_day+$day)%31;} - if($hour){ - if(($hour + $now_hour)>= 24){ $next_day += 1;} - $next_hour = ($now_hour+$hour)%24;} - if($min){ - if(($min + $now_min)> 60){ $next_hour += 1;} - $next_min = ($now_min+$min)%60;} - if($day_week){ - $day_week = $day_week % 6; // 7 and 0 both mean Sunday - $now_day_week = $now_day_week % 6; // 7 and 0 both mean Sunday - $next_day += abs($day_week - $now_day_week);} - //new \SYSTEM\LOG\INFO(print_r(array($base_time,$min,$hour,$day,$day_week,$month),true)); - //new \SYSTEM\LOG\INFO(print_r(array($now_min, $now_hour, $now_day, $now_month, $now_day_week),true)); - //new \SYSTEM\LOG\INFO(print_r(array($next_hour, $next_min, 0, $next_month, $next_day, $next_year),true)); - return mktime($next_hour, $next_min, 0, $next_month, $next_day, $next_year); - } - public static function last($base_time,$min,$hour,$day,$day_week,$month){ - list( $now_min, $now_hour, $now_day, $now_month, $now_day_week ) = preg_split( "/ /", date("i H d n N", $base_time ) ); - list( $last_min, $last_hour, $last_day, $last_month, $last_year) = preg_split( "/ /", date("i H d n Y", $base_time ) ); - if($month){ - if(($now_month - $month)< 12){ $last_year -= 1;} - $last_month = ($now_month-$month)%12;} - if($day){ - if(($now_day - $day)> 31){ $last_month -= 1;} - $last_day = ($now_day-$day)%31;} - if($hour){ - if(($now_hour - $hour)> 24){ $last_day -= 1;} - $last_hour = ($now_hour-$hour)%24;} - if($min){ - if(($now_min - $min)> 60){ $last_hour -= 1;} - $last_min = ($now_min-$min)%60;} - if($day_week){ - $day_week = $day_week % 6; // 7 and 0 both mean Sunday - $now_day_week = $now_day_week % 6; // 7 and 0 both mean Sunday - $last_day -= abs($day_week - $now_day_week);} - return mktime($last_hour, $last_min, 0, $last_month, $last_day, $last_year); - } - public static function check($base_time,$last_run,$min,$hour,$day,$day_week,$month){ - //new \SYSTEM\LOG\INFO('next:'.self::next($last_run, $min, $hour, $day, $day_week, $month).' bt:'.$base_time.' last:'.$last_run.' dif:'.(self::next($last_run, $min, $hour, $day, $day_week, $month) - time($base_time)).' run:'.(self::next($last_run, $min, $hour, $day, $day_week, $month) <= time($base_time) ? 'run' : 'not run')); - return self::next($last_run, $min, $hour, $day, $day_week, $month) <= $base_time ? true : false;} - public static function next_now($min,$hour,$day,$day_week,$month){ - return self::next(time(),$min,$hour,$day,$day_week,$month);} - public static function last_now($min,$hour,$day,$day_week,$month){ - return self::last(time(),$min,$hour,$day,$day_week,$month);} - public static function check_now($last_run,$min,$hour,$day,$day_week,$month){ - return self::check(time(),$last_run,$min,$hour,$day,$day_week,$month);} -} \ No newline at end of file diff --git a/db/autoload.inc.php b/db/autoload.inc.php deleted file mode 100644 index 2bca5de..0000000 --- a/db/autoload.inc.php +++ /dev/null @@ -1,6 +0,0 @@ -dbinfo = $dbinfo; - if(!$dbinfo){ - $dbinfo = \SYSTEM\system::getSystemDBInfo();} - - if($dbinfo instanceof \SYSTEM\DB\DBInfoPG){ - $this->connection = new \SYSTEM\DB\ConnectionPG($dbinfo); - } else if ($dbinfo instanceof \SYSTEM\DB\DBInfoMYS){ - $this->connection = new \SYSTEM\DB\ConnectionMYS($dbinfo); - } else if ($dbinfo instanceof \SYSTEM\DB\DBInfoAMQP){ - $this->connection = new \SYSTEM\DB\ConnectionAMQP($dbinfo); - } else if ($dbinfo instanceof \SYSTEM\DB\DBInfoSQLite){ - $this->connection = new \SYSTEM\DB\ConnectionSQLite($dbinfo); - } else { - throw new \Exception('Could not understand Database Settings. Check ur Database Settings');} - } - - //Destruct connection object. - public function __destruct(){ - unset($this->connection);} - - //Query connected Database with prepared statements, $stmt = sql string with ?; $values = array of values - public function prepare($stmtName, $stmt, $values){ - return $this->connection->prepare($stmtName, $stmt, $values);} - - //Close Connection - public function close(){ - return $this->connection->close();} - - //Query connected Database - public function query($query){ - return $this->connection->query($query);} - - public function exec($query){ - return $this->connection->exec($query);} -} \ No newline at end of file diff --git a/db/connection/ConnectionAMQP.php b/db/connection/ConnectionAMQP.php deleted file mode 100644 index 99d9784..0000000 --- a/db/connection/ConnectionAMQP.php +++ /dev/null @@ -1,66 +0,0 @@ -connection = new \AMQPConnection( - array( - 'host' => $dbinfo->m_host, - 'vhost' => $dbinfo->m_database, - 'port' => $dbinfo->m_port, - 'login' => $dbinfo->m_user, - 'password' => $dbinfo->m_password - )); - - $this->connection->connect(); - - if(!$this->connection || !$this->connection->isConnected()){ - throw new \SYSTEM\LOG\ERROR('Cannot connect to the amqp queue!');} - } - - public function send($msg){ - $channel = new \AMQPChannel($this->connection); - $exchange = new \AMQPExchange($channel); - $exchange->setFlags(AMQP_DURABLE); - $exchange->setName('exchange2'); - $exchange->setType('direct'); - //$exchange->declare(); - $exchange->declareExchange(); - - $queue = new \AMQPQueue($channel); - $queue->setName('series'); - $queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); - //$queue->declare(); - $queue->declareQueue(); - $queue->bind('exchange2','series'); - - $channel->startTransaction(); - $message = $exchange->publish(json_encode($msg), 'series', AMQP_MANDATORY, - array('content_type' => 'application/json', - 'delivery_mode' => 2)); - $channel->commitTransaction(); - - if(!$message) { - throw new \SYSTEM\LOG\ERROR("Error: Message '".$message."' was not sent to queue.!"); - } - } - - public function __destruct(){ - $this->close(); - } - - public function close(){ - if (!$this->connection->disconnect()) { - throw new Exception("Could not disconnect !"); - } - } - - public function query($query){ } - - public function prepare($stmtName, $stmt, $values){} - -} \ No newline at end of file diff --git a/db/connection/ConnectionAbstr.php b/db/connection/ConnectionAbstr.php deleted file mode 100644 index 258bc8d..0000000 --- a/db/connection/ConnectionAbstr.php +++ /dev/null @@ -1,28 +0,0 @@ -dbinfo = $dbinfo; - - $this->connection = @mysqli_connect($dbinfo->m_host, $dbinfo->m_user, $dbinfo->m_password, $new_link, $client_flag); - if(!$this->connection){ - throw new \Exception('Could not connect to Database. Check ur Database Settings');} - - if(!mysqli_select_db($this->connection, $dbinfo->m_database)){ - mysqli_close($this->connection); - throw new \Exception('Could not select Database. Check ur Database Settings: '.mysqli_error($this->connection));} - } - - public function __destruct(){ - $this->close();} - - public function prepare($stmtName, $stmt, $values){ - $prepStmt = \mysqli_prepare($this->connection, $stmt); - if(!$prepStmt){ - throw new \SYSTEM\LOG\ERROR('Prepared Statement prepare fail: '. \mysqli_error($this->connection));} - - $types = ''; - $binds = array($prepStmt,null); - for($i =0; $i < \count($values);$i++){ - $types .= self::getPrepareValueType($values[$i]); - $binds[] = &$values[$i];} - $binds[1] = $types; - \call_user_func_array('mysqli_stmt_bind_param', $binds); //you need 2 append the parameters - thats the right way to do that. - - if(!mysqli_stmt_execute($prepStmt)){ - throw new \SYSTEM\LOG\ERROR("Could not execute prepare statement: ". \mysqli_stmt_error($prepStmt));} - - return new ResultMysqliPrepare($prepStmt,$this); - } - - public function close(){ - return mysqli_close($this->connection);} - - public function query($query){ - $result = mysqli_query($this->connection, $query); - if(!$result){ - throw new \SYSTEM\LOG\ERROR('Could not query Database. Check ur Query Syntax or required Rights: '.mysqli_error($this->connection));} - - if($result === TRUE){ - return TRUE;} - - return new ResultMysqli($result); - } -} \ No newline at end of file diff --git a/db/connection/ConnectionPG.php b/db/connection/ConnectionPG.php deleted file mode 100644 index 58190f3..0000000 --- a/db/connection/ConnectionPG.php +++ /dev/null @@ -1,61 +0,0 @@ -dbinfo = $dbinfo; - - $this->connection = pg_connect("host=".$dbinfo->m_host." port=".$dbinfo->m_port." dbname=".$dbinfo->m_database." - user=".$dbinfo->m_user." password=".$dbinfo->m_password.""); - if(!$this->connection){ - throw new \Exception('Could not connect to Database. Check ur Database Settings');} - } - - public function __destruct(){} - - public function prepare($stmtName, $stmt, $values){ - $result = pg_query_params($this->connection, 'SELECT name FROM pg_prepared_statements WHERE name = $1', array($stmtName)); - //var_dump($stmt); - //var_dump($values); - if (pg_num_rows($result) == 0) { - $result = \pg_prepare($this->connection, $stmtName, $stmt); - if(($info = \pg_last_notice($this->connection)) != ''){ - new \SYSTEM\LOG\INFO($info);} - } - - if(!$result) - throw new \SYSTEM\LOG\ERROR('Prepared Statement prepare fail: '. \pg_last_error($this->connection)); - - $result = \pg_execute($this->connection, $stmtName, $values); - if(($info = \pg_last_notice($this->connection)) != ''){ - new \SYSTEM\LOG\INFO($info);} - - if(!$result) - throw new \SYSTEM\LOG\ERROR("Could not execute prepare statement: ". \pg_last_error($this->connection)); - - return new ResultPostgres($result,$this); - } - - public function close(){ - return pg_close($this->connection);} - - public function query($query){ - $result = \pg_query($this->connection, $query); - if(($info = \pg_last_notice($this->connection)) != ''){ - new \SYSTEM\LOG\INFO($info);} - - if(!$result){ - throw new \SYSTEM\LOG\ERROR('Could not query Database. Check ur Query Syntax or required Rights: '.pg_last_error($this->connection));} - - if($result === TRUE){ - return TRUE;} - - return new ResultPostgres($result,$this); - } - -} \ No newline at end of file diff --git a/db/connection/ConnectionSQLite.php b/db/connection/ConnectionSQLite.php deleted file mode 100644 index 1cca3a3..0000000 --- a/db/connection/ConnectionSQLite.php +++ /dev/null @@ -1,48 +0,0 @@ -connection = new \SQLite3($dbinfo->m_database); - if(!$this->connection){ - throw new \Exception('Could not connect to Database. Check ur Database Settings: '.$error);} - } - - public function __destruct(){ - $this->close();} - - public function prepare($stmtName, $stmt, $values){ - $prepStmt = $this->connection->prepare($stmt); - if(!$prepStmt){ - throw new \SYSTEM\LOG\ERROR('Prepared Statement prepare fail: '. $error);} - - foreach($values as $key=>$val){ - $prepStmt->bindParam($key,$val);} - - if(!($result = $prepStmt->execute())){ - throw new \SYSTEM\LOG\ERROR("Could not execute prepare statement: ". $error);} - - return new ResultSQLite($result,$prepStmt); - } - - public function close(){ - return $this->connection->close();} - - public function query($query){ - $result = $this->connection->query($query); - if(!$result){ - throw new \SYSTEM\LOG\ERROR('Could not query Database. Check ur Query Syntax or required Rights: '.$this->connection->lastErrorMsg());} - if($result === TRUE){ - return TRUE;} - - return new ResultSQLite($result,null); - } - - public function exec($query){ - return $this->connection->exec($query); - } -} \ No newline at end of file diff --git a/db/dbinfo/DBInfo.php b/db/dbinfo/DBInfo.php deleted file mode 100644 index 326ab1e..0000000 --- a/db/dbinfo/DBInfo.php +++ /dev/null @@ -1,13 +0,0 @@ -m_database = $vhost; - $this->m_user = $user; - $this->m_password = $password; - $this->m_host = $host; - $this->m_port = $port; - - if( $this->m_database == null || - $this->m_user == null || - $this->m_password == null || - $this->m_host == null){ - throw new \Exception("AMQP Connection Info not correct, vhost, user, password or host are null");} - } -} \ No newline at end of file diff --git a/db/dbinfo/DBInfoMYS.php b/db/dbinfo/DBInfoMYS.php deleted file mode 100644 index a7e3580..0000000 --- a/db/dbinfo/DBInfoMYS.php +++ /dev/null @@ -1,19 +0,0 @@ -m_database = $database; - $this->m_user = $user; - $this->m_password = $password; - $this->m_host = $host; - $this->m_port = $port; - - if( $this->m_database == null || - $this->m_user == null || - $this->m_password == null || - $this->m_host == null){ - throw new \Exception("DBInfo not correct, database, user, password or host are null");} - } -} \ No newline at end of file diff --git a/db/dbinfo/DBInfoPG.php b/db/dbinfo/DBInfoPG.php deleted file mode 100644 index 1201904..0000000 --- a/db/dbinfo/DBInfoPG.php +++ /dev/null @@ -1,19 +0,0 @@ -m_database = $database; - $this->m_user = $user; - $this->m_password = $password; - $this->m_host = $host; - $this->m_port = $port; - - if( $this->m_database == null || - $this->m_user == null || - $this->m_password == null || - $this->m_host == null){ - throw new \Exception("DBInfo not correct, database, user, password or host are null");} - } -} \ No newline at end of file diff --git a/db/dbinfo/DBInfoSQLite.php b/db/dbinfo/DBInfoSQLite.php deleted file mode 100644 index c89dd8e..0000000 --- a/db/dbinfo/DBInfoSQLite.php +++ /dev/null @@ -1,15 +0,0 @@ -m_database = $database; - $this->m_user = $user; - $this->m_password = $password; - $this->m_host = $host; - $this->m_port = $port; - - if( $this->m_database == null){ - throw new \Exception("DBInfo not correct, database, permissions are null");} - } -} \ No newline at end of file diff --git a/db/qq/QP.php b/db/qq/QP.php deleted file mode 100644 index 534b5d7..0000000 --- a/db/qq/QP.php +++ /dev/null @@ -1,35 +0,0 @@ -dbinfo); - $is_pg = \SYSTEM\system::isSystemDbInfoPG(); - if($query->dbinfo){ - $is_pg = $query->dbinfo instanceof \SYSTEM\DB\DBInfoPG;} - if($is_pg){ - return $con->prepare($query->name,$query->sql_pg,$params); - } else { - return $con->prepare($query->name,$query->sql_mys,$params_mys ? $params_mys : $params);} - } - - public static function QA($params,$params_mys = null){ - $res = self::QQ($params,$params_mys); - $result = array(); - while($row = $res->next()){ - $result[] = $row;} - return $result; - } - - public static function Q1($params,$params_mys = null){ - return self::QQ($params,$params_mys)->next();} - - public static function QI($params,$params_mys = null){ - $qq = self::QQ($params,$params_mys); - return $qq->affectedRows() != (0||null);} - //override this - protected static function query(){ - throw new \SYSTEM\LOG\ERROR('query function of your QP Class not overwritten!');} - //return new QQuery();} -} \ No newline at end of file diff --git a/db/qq/QQ.php b/db/qq/QQ.php deleted file mode 100644 index ab86314..0000000 --- a/db/qq/QQ.php +++ /dev/null @@ -1,34 +0,0 @@ -dbinfo); - $is_pg = \SYSTEM\system::isSystemDbInfoPG(); - if($query->dbinfo){ - $is_pg = $query->dbinfo instanceof \SYSTEM\DB\DBInfoPG;} - if($is_pg){ - return $con->query($query->sql_pg); - } else { - return $con->query($query->sql_mys);} - } - - public static function QA(){ - $res = self::QQ(); - $result = array(); - while($row = $res->next()){ - $result[] = $row;} - return $result; - } - - public static function Q1(){ - return self::QQ()->next();} - public static function QI(){ - $qq = self::QQ(); - return $qq;} - //override this - protected static function query(){ - throw new \SYSTEM\LOG\ERROR('query function of your QQ Class not overwritten!');} - //return new QQuery();} -} \ No newline at end of file diff --git a/db/qq/QQuery.php b/db/qq/QQuery.php deleted file mode 100644 index 3b7a306..0000000 --- a/db/qq/QQuery.php +++ /dev/null @@ -1,16 +0,0 @@ -name = $name; - $this->sql_pg = $sql_pg; - $this->sql_mys = $sql_mys; - $this->dbinfo = $dbinfo; - } -} diff --git a/db/result/Result.php b/db/result/Result.php deleted file mode 100644 index f68e306..0000000 --- a/db/result/Result.php +++ /dev/null @@ -1,16 +0,0 @@ -res = $res;} - - public function __destruct(){ - $this->close();} - - public function close(){ - pg_free_result($this->res);} - - public function count(){ - return pg_num_rows($this->res);} - - public function affectedRows(){ - throw new \SYSTEM\LOG\ERROR("Not Supported!");} - - public function next($object = false, $result_type = MYSQL_BOTH){ - if($object){ - $this->current = pg_fetch_object($this->res); - } else { - $this->current = pg_fetch_assoc($this->res); - } - return $this->current; - } - - public function seek($row_number){ - return pg_data_seek($this->res,$row_number);} -} \ No newline at end of file diff --git a/db/result/ResultMysqli.php b/db/result/ResultMysqli.php deleted file mode 100644 index 92ccd74..0000000 --- a/db/result/ResultMysqli.php +++ /dev/null @@ -1,37 +0,0 @@ -res = $res;} - - public function __destruct(){ - $this->close();} - - public function close(){ - mysqli_free_result($this->res);} - - public function count(){ - return mysqli_num_rows($this->res);} - - public function affectedRows(){ - return mysqli_affected_rows($this->res);} - - public function next($object = false, $result_type = MYSQL_BOTH){ - if($object){ - $this->current = mysqli_fetch_object($this->res); - } else { - $this->current = mysqli_fetch_assoc($this->res); - } - return $this->current; - } - - public function seek($row_number){ - return mysqli_data_seek($this->res,$row_number);} -} \ No newline at end of file diff --git a/db/result/ResultMysqliPrepare.php b/db/result/ResultMysqliPrepare.php deleted file mode 100644 index 7d5dcd4..0000000 --- a/db/result/ResultMysqliPrepare.php +++ /dev/null @@ -1,58 +0,0 @@ -res = $res; - $this->connection = $connection; - - $this->meta = \mysqli_stmt_result_metadata($this->res); - - if(!$this->meta){ - //occurs on insert - //throw new \Exception("Could not retrieve meta for prepare statement");} - return;} - - while ($field = $this->meta->fetch_field() ) { - $this->binds[$field->table.'.'.$field->name] = &$this->binds[$field->table.'.'.$field->name];} //fix for ambiguous fieldnames - - \mysqli_free_result($this->meta); - - call_user_func_array(array($this->res, 'bind_result'), $this->binds); //you need 2 append the parameters - thats the right way to do that. - } - - public function __destruct() { - $this->close();} - - public function close(){ - mysqli_stmt_free_result($this->res); - mysqli_stmt_close($this->res); - } - - public function count(){ - return \mysqli_stmt_num_rows($this->res);} - - public function affectedRows(){ - return \mysqli_stmt_affected_rows($this->res);} - - //$object not used - //$result_type not used! - public function next($object = false, $result_type = MYSQL_BOTH){ - if(\mysqli_stmt_fetch($this->res)){ - foreach( $this->binds as $key=>$value ){ - $row[substr($key, strpos($key, '.')+1)] = $value;} //fix for ambiguous fieldnames - return $row;} - return NULL; - } - - public function seek($row_number){ - return \mysqli_stmt_data_seek($this->res,$row_number);} -} \ No newline at end of file diff --git a/db/result/ResultPostgres.php b/db/result/ResultPostgres.php deleted file mode 100644 index 012f3f1..0000000 --- a/db/result/ResultPostgres.php +++ /dev/null @@ -1,39 +0,0 @@ -res = $res; - $this->connection = $connection;} - - public function __destruct(){ - $this->close();} - - public function close(){ - pg_free_result($this->res);} - - public function count(){ - return pg_num_rows($this->res);} - - public function affectedRows(){ - return pg_affected_rows($this->res);} - - public function next($object = false, $result_type = MYSQL_BOTH){ - if($object){ - $this->current = pg_fetch_object($this->res); - } else { - $this->current = pg_fetch_assoc($this->res); - } - return $this->current; - } - - public function seek($row_number){ - return pg_data_seek($this->res,$row_number);} -} \ No newline at end of file diff --git a/db/result/ResultSQLite.php b/db/result/ResultSQLite.php deleted file mode 100644 index 7a7996f..0000000 --- a/db/result/ResultSQLite.php +++ /dev/null @@ -1,81 +0,0 @@ -res = $res; - $this->stmt = $stmt;} - - public function __destruct(){ - $this->close();} - - public function close(){ - if($this->stmt){ - $this->stmt->close();} - } - - public function count(){ - throw new Exception("Problem SQLite"); - return mysqli_num_rows($this->res);} - /* - * if ($res->numColumns() && $res->columnType(0) != SQLITE3_NULL) { - // have rows -} else { - // zero rows -} - */ - - public function affectedRows(){ - throw new Exception("Problem SQLite"); - return mysqli_affected_rows($this->res);} - - public function next($object = false, $result_type = SQLITE3_ASSOC){ - if($object){ - throw new Exception("Problem SQLite"); - } else { - $this->current = $this->res->fetchArray($result_type); - } - return $this->current; - } - - /* - * function fetchObject($sqlite3result, $objectType = NULL) { - $array = $sqlite3result->fetchArray(); - - if(is_null($objectType)) { - $object = new stdClass(); - } else { - // does not call this class' constructor - $object = unserialize(sprintf('O:%d:"%s":0:{}', strlen($objectType), $objectType)); - } - - $reflector = new ReflectionObject($object); - for($i = 0; $i < $sqlite3result->numColumns(); $i++) { - $name = $sqlite3result->columnName($i); - $value = $array[$name]; - - try { - $attribute = $reflector->getProperty($name); - - $attribute->setAccessible(TRUE); - $attribute->setValue($object, $value); - } catch (ReflectionException $e) { - $object->$name = $value; - } - } - - return $object; -} - */ - - public function seek($row_number){ - throw new Exception("Problem SQLite"); - return mysqli_data_seek($this->res,$row_number);} -} \ No newline at end of file diff --git a/dbd/autoload.inc.php b/dbd/autoload.inc.php deleted file mode 100644 index 3cfa7e3..0000000 --- a/dbd/autoload.inc.php +++ /dev/null @@ -1,3 +0,0 @@ -TinyMCE LogoWelcome to the TinyMCE editor demo!\n

Feel free to try out the different features that are provided, please note that the MoxieManager specific functionality is part of our commercial offering. The demo is to show the integration.

\n

Got questions or need help?

\n

If you have questions or need help, feel free to visit our community forum! We also offer Enterprise support solutions. Also do not miss out on the documentation, its a great resource wiki for understanding how TinyMCE works and integrates.

\n

Found a bug?

\n

If you think you have found a bug, you can use the Bug Tracker to report bugs to the developers.

\n

And here is a simple table for you to play with.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ProductCostReally?
TinyMCEFreeYES!
PluploadFreeYES!
\n

Enjoy our software and create great content!

\n

Oh, and by the way, don\'t forget to check out our other product called Plupload, your ultimate upload solution with HTML5 upload support!

', '

TinyMCE LogoWelcome to the TinyMCE editor demo!

\n

Feel free to try out the different features that are provided, please note that the MoxieManager specific functionality is part of our commercial offering. The demo is to show the integration.

\n

Got questions or need help?

\n

If you have questions or need help, feel free to visit our community forum! We also offer Enterprise support solutions. Also do not miss out on the documentation, its a great resource wiki for understanding how TinyMCE works and integrates.

\n

Found a bug?

\n

If you think you have found a bug, you can use the Bug Tracker to report bugs to the developers.

\n

And here is a simple table for you to play with.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ProductCostReally?
TinyMCEFreeYES!
PluploadFreeYES!
\n

Enjoy our software and create great content!

\n

Oh, and by the way, don\'t forget to check out our other product called Plupload, your ultimate upload solution with HTML5 upload support!

'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/sai_api.sql b/dbd/sql/mysql/data/sai_api.sql deleted file mode 100644 index f6ca346..0000000 --- a/dbd/sql/mysql/data/sai_api.sql +++ /dev/null @@ -1,152 +0,0 @@ -DELETE FROM `system_api` WHERE `group` = 42; - --- basic -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (0, 42, 0, -1, NULL, 'sai_mod', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1, 42, 1, 0, NULL, 'js', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (2, 42, 1, 0, NULL, 'css', NULL); --- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (3, 42, 0, 0, NULL, 'page', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5, 42, 4, -1, NULL, '_escaped_fragment_', 'STRING'); - --- system_api -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10, 42, 0, -1, NULL, 'call', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (11, 42, 0, 10, NULL, 'action', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (20, 42, 2, 11, 'login', 'username', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (21, 42, 2, 11, 'login', 'password_sha', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (22, 42, 2, 11, 'login', 'password_md5', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (23, 42, 2, 11, 'check', 'rightid', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (24, 42, 2, 11, 'create', 'username', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (25, 42, 2, 11, 'create', 'password_sha', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (26, 42, 2, 11, 'create', 'email', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (27, 42, 2, 11, 'create', 'locale', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (30, 42, 2, 10, 'files', 'cat', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (31, 42, 3, 30, 'files', 'id', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (40, 42, 2, 10, 'text', 'request', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (41, 42, 2, 40, 'text', 'lang', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (50, 42, 2, 10, 'pages', 'group', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (51, 42, 2, 10, 'pages', 'state', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (52, 42, 1, 50, NULL, 'js', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (53, 42, 2, 51, NULL, 'group', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (55, 42, 1, 50, NULL, 'css', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (56, 42, 2, 55, NULL, 'group', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (90, 42, 4, -1, NULL, '_lang', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (91, 42, 4, -1, NULL, '_result', 'RESULT'); - --- specific stuff for mods -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_login', 'action', NULL); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (101, 42, 2, 100, 'login', 'username', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (102, 42, 2, 100, 'login', 'password_sha', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (103, 42, 2, 100, 'login', 'password_md5', 'ALL'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (110, 42, 2, 100, 'register', 'username', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (111, 42, 2, 100, 'register', 'password', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (112, 42, 2, 100, 'register', 'email', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (113, 42, 3, 100, 'register', 'locale', 'ALL'); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (200, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_log', 'action', NULL); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (201, 42, 3, 200, 'filter', 'filter', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (210, 42, 3, 200, 'error', 'error', 'INT'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (220, 42, 0, 200, 'stats', 'name', null); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (221, 42, 3, 220, null, 'filter', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (222, 42, 3, 220, null, 'db', 'STRING'); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (300, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_security', 'action', NULL); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (301, 42, 2, 300, 'user', 'username', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (302, 42, 3, 300, 'users', 'search', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (310, 42, 2, 300, 'addright', 'id', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (311, 42, 2, 300, 'addright', 'name', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (312, 42, 2, 300, 'addright', 'description', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (320, 42, 2, 300, 'deleteright', 'id', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (321, 42, 2, 300, 'deleterightconfirm', 'id', 'UINT'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (330, 42, 2, 300, 'addrightuser', 'rightid', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (331, 42, 2, 300, 'addrightuser', 'userid', 'UINT'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (340, 42, 2, 300, 'deleterightuser', 'rightid', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (341, 42, 2, 300, 'deleterightuser', 'userid', 'UINT'); - - --- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (400, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_sai_mods', 'action', NULL); - - --- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (500, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_config', 'action', NULL); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (600, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_api', 'action', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (601, 42, 2, 600, 'addcall', 'ID', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (602, 42, 2, 600, 'addcall', 'group', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (603, 42, 2, 600, 'addcall', 'type', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (604, 42, 2, 600, 'addcall', 'parentID', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (605, 42, 2, 600, 'addcall', 'parentValue', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (606, 42, 2, 600, 'addcall', 'name', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (607, 42, 2, 600, 'addcall', 'verify', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (608, 42, 2, 600, 'deletecall', 'ID', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (609, 42, 2, 600, 'deletedialog', 'ID', 'INT'); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (700, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_text', 'action', NULL); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (701, 42, 2, 700, 'load', 'id', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (702, 42, 2, 700, 'load', 'group', 'INT'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (710, 42, 2, 700, 'singleload', 'id', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (711, 42, 2, 700, 'singleload', 'lang', 'ALL'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (720, 42, 2, 700, 'delete', 'id', 'ALL'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (730, 42, 2, 700, 'add', 'id', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (731, 42, 2, 700, 'add', 'category', 'INT'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (740, 42, 2, 700, 'edit', 'id', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (741, 42, 2, 700, 'edit', 'lang', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (742, 42, 2, 700, 'edit', 'category', 'ALL'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (743, 42, 2, 700, 'edit', 'newtext', 'ALL'); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (800, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_files', 'action', NULL); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (801, 42, 2, 800, 'upload', 'cat', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (810, 42, 2, 800, 'del', 'cat', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (811, 42, 2, 800, 'del', 'id', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (820, 42, 2, 800, 'rn', 'cat', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (821, 42, 2, 800, 'rn', 'id', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (822, 42, 2, 800, 'rn', 'newid', 'STRING'); --- -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (830, 42, 2, 800, 'tab', 'name', 'STRING'); - - --- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (900, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_cache', 'action', NULL); - - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1000, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_todo', 'action', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1001, 42, 2, 1000, 'todo', 'todo', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1002, 42, 2, 1000, 'open', 'todo', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1003, 42, 2, 1000, 'close', 'todo', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1004, 42, 2, 1000, 'add', 'todo', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1010, 42, 2, 1000, 'edit', 'todo', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1011, 42, 2, 1000, 'edit', 'message', 'STRING'); - - --- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_docu', 'action', NULL); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1200, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_cron', 'action', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1201, 42, 2, 1200, 'add', 'cls', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1202, 42, 2, 1200, 'add', 'min', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1203, 42, 2, 1200, 'add', 'hour', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1204, 42, 2, 1200, 'add', 'day', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1205, 42, 2, 1200, 'add', 'day_week', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1206, 42, 2, 1200, 'add', 'month', 'INT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1208, 42, 2, 1200, 'del', 'cls', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1209, 42, 2, 1200, 'deldialog', 'cls', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1210, 42, 2, 1200, 'change', 'cls', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1211, 42, 2, 1200, 'change', 'status', 'INT'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/sai_error_locale_string.sql b/dbd/sql/mysql/data/sai_error_locale_string.sql deleted file mode 100644 index 3517ad2..0000000 --- a/dbd/sql/mysql/data/sai_error_locale_string.sql +++ /dev/null @@ -1,9 +0,0 @@ -DELETE FROM system_locale_string WHERE category = 43; -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_username_short', 43, 'Username is too short', 'Nutzername ist zu kurz'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_username_long', 43, 'Username is too long', 'Nutzername ist zu lang'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_username_miss', 43, 'Username required', 'Nutzername erfoderlich'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_password_miss', 43, 'Password required', 'Passwort erforderlich'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_password_long', 43, 'Password too long', 'Passwort zu lang'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_password_short', 43, 'Password too short', 'Passwort zu kurz'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_password_match', 43, 'Passwords do not match!', 'Passwords do not match!'); -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_error_email_wrong', 43, 'Invalid EMail!', 'Invalid EMail!'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/sai_locale_string.sql b/dbd/sql/mysql/data/sai_locale_string.sql deleted file mode 100644 index c91637c..0000000 --- a/dbd/sql/mysql/data/sai_locale_string.sql +++ /dev/null @@ -1,2 +0,0 @@ -DELETE FROM system_locale_string WHERE category = 42; -INSERT INTO `system_locale_string` (`id`, `category`, `enUS`, `deDE`) VALUES ('sai_mod_login_text', 42, 'Please login for developer access (if you are a developer).', 'Please login for developer access (if you are a developer).'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/system_api.sql b/dbd/sql/mysql/data/system_api.sql deleted file mode 100644 index 8c1bf33..0000000 --- a/dbd/sql/mysql/data/system_api.sql +++ /dev/null @@ -1,25 +0,0 @@ -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10, 0, 0, -1, NULL, 'call', NULL); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (11, 0, 0, 10, NULL, 'action', NULL); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (20, 0, 2, 11, 'login', 'username', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (21, 0, 2, 11, 'login', 'password_sha', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (22, 0, 2, 11, 'login', 'password_md5', 'STRING'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (23, 0, 2, 11, 'check', 'rightid', 'UINT'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (24, 0, 2, 11, 'create', 'username', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (25, 0, 2, 11, 'create', 'password_sha', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (26, 0, 2, 11, 'create', 'email', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (27, 0, 2, 11, 'create', 'locale', 'LANG'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (30, 0, 2, 10, 'files', 'cat', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (31, 0, 3, 30, 'files', 'id', 'STRING'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (40, 0, 2, 10, 'text', 'request', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (41, 0, 2, 10, 'text', 'lang', 'LANG'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (50, 0, 2, 10, 'pages', 'group', 'UINT'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (51, 0, 2, 10, 'pages', 'state', 'STRING'); - -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (90, 0, 4, -1, NULL, '_lang', 'LANG'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (91, 0, 4, -1, NULL, '_result', 'RESULT'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/system_api_default.sql b/dbd/sql/mysql/data/system_api_default.sql deleted file mode 100644 index d3989c6..0000000 --- a/dbd/sql/mysql/data/system_api_default.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (0, 1, 4, -1, NULL, '_escaped_fragment_', 'STRING'); -INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1, 1, 0, -1, NULL, 'page', NULL); diff --git a/dbd/sql/mysql/data/system_cron.sql b/dbd/sql/mysql/data/system_cron.sql deleted file mode 100644 index 4cf74c7..0000000 --- a/dbd/sql/mysql/data/system_cron.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `system_cron` (`class`, `min`, `hour`, `day`, `day_week`, `month`, `last_run`, `status`) VALUES ('\\SYSTEM\\CRON\\cron_log2sqlite', 0, 0, 1, 0, 0, '2015-01-01 01:00:00', 0); -INSERT INTO `system_cron` (`class`, `min`, `hour`, `day`, `day_week`, `month`, `last_run`, `status`) VALUES ('\\SYSTEM\\CRON\\cron_cache_delete', 0, 0, 1, 0, 0, '2015-01-01 01:00:00', 0); diff --git a/dbd/sql/mysql/data/system_page.sql b/dbd/sql/mysql/data/system_page.sql deleted file mode 100644 index 8edbad1..0000000 --- a/dbd/sql/mysql/data/system_page.sql +++ /dev/null @@ -1,13 +0,0 @@ -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'api', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_api', 'init_saimod_sys_api', '\\SYSTEM\\SAI\\saimod_sys_api'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'cache', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_cache', 'init_saimod_sys_cache', '\\SYSTEM\\SAI\\saimod_sys_cache'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'config', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_config', 'init_saimod_sys_config', '\\SYSTEM\\SAI\\saimod_sys_config'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'cron', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_cron', 'init_saimod_sys_cron', '\\SYSTEM\\SAI\\saimod_sys_cron'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'docu', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_docu', 'init_saimod_sys_docu', '\\SYSTEM\\SAI\\saimod_sys_docu'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'files', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_files', 'init_saimod_sys_files', '\\SYSTEM\\SAI\\saimod_sys_files'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'log', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_log', 'init_saimod_sys_log', '\\SYSTEM\\SAI\\saimod_sys_log'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'login', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login', 'init_saimod_sys_login', '\\SYSTEM\\SAI\\saimod_sys_login'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'mod', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_mod', 'init_saimod_sys_mod', '\\SYSTEM\\SAI\\saimod_sys_mod'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'security', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_security', 'init_saimod_sys_security', '\\SYSTEM\\SAI\\saimod_sys_security'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'start', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saistart_sys_sai', 'init_saistart_sys_sai', '\\SYSTEM\\SAI\\saistart_sys_sai'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'text', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_text', 'init_saimod_sys_text', '\\SYSTEM\\SAI\\saimod_sys_text'); -INSERT INTO `system_page` (`group`, `id`, `div`, `url`, `func`, `php_class`) VALUES (42, 'todo', '#content', './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_todo', 'init_saimod_sys_todo', '\\SYSTEM\\SAI\\saimod_sys_todo'); \ No newline at end of file diff --git a/dbd/sql/mysql/data/system_rights.sql b/dbd/sql/mysql/data/system_rights.sql deleted file mode 100644 index f56c8bb..0000000 --- a/dbd/sql/mysql/data/system_rights.sql +++ /dev/null @@ -1,13 +0,0 @@ -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (1, 'SYS_SAI', 'SAI access right'); - -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (5, 'SYS_SAI_SECURITY', 'Allows access to the Security Module in SAI'); -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (6, 'SYS_SAI_SECURITY_RIGHTS_EDIT', 'Allows deleting, editing and adding of Right in the SAI module Security'); - -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (10, 'SYS_SAI_LOCALE', 'Allows access to the Locale Module in SAI to edit or add Multilanguage Text'); - -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (15, 'SYS_SAI_IMG', 'Allows access to the Image Module in SAI to delete or add Pictures'); - -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (20, 'SYS_SAI_API', 'SAI API Access right'); -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (21, 'SYS_SAI_API_EDIT', 'SAI API Edit right'); - -INSERT INTO `system_rights` (`ID`, `name`, `description`) VALUES (25, 'SYS_SAI_CRON', 'SAI Cron Access right'); \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_api.sql b/dbd/sql/mysql/schema/system_api.sql deleted file mode 100644 index 24887b5..0000000 --- a/dbd/sql/mysql/schema/system_api.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE `system_api` ( - `ID` INT(10) UNSIGNED NOT NULL, - `group` INT(10) UNSIGNED NOT NULL, - `type` TINYINT(3) UNSIGNED NOT NULL, - `parentID` INT(11) NOT NULL, - `parentValue` CHAR(50) NULL DEFAULT NULL, - `name` CHAR(50) NOT NULL, - `verify` CHAR(50) NULL DEFAULT NULL, - PRIMARY KEY (`ID`, `group`) -) -COLLATE='utf8_general_ci' -ENGINE=MyISAM; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_cache.sql b/dbd/sql/mysql/schema/system_cache.sql deleted file mode 100644 index 18737d4..0000000 --- a/dbd/sql/mysql/schema/system_cache.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE `system_cache` ( - `ID` INT(10) NOT NULL AUTO_INCREMENT, - `CacheID` INT(10) NOT NULL, - `Ident` CHAR(255) NOT NULL, - `data` BINARY(255) NOT NULL, - PRIMARY KEY (`ID`) -) -COLLATE='utf8_general_ci' -ENGINE=MyISAM; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_cron.sql b/dbd/sql/mysql/schema/system_cron.sql deleted file mode 100644 index d884858..0000000 --- a/dbd/sql/mysql/schema/system_cron.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE `system_cron` ( - `class` CHAR(255) NOT NULL, - `min` INT(10) NULL DEFAULT NULL, - `hour` INT(10) NULL DEFAULT NULL, - `day` INT(10) NULL DEFAULT NULL, - `day_week` INT(10) NULL DEFAULT NULL, - `month` INT(10) NULL DEFAULT NULL, - `last_run` TIMESTAMP NULL DEFAULT NULL, - `status` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`class`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB; diff --git a/dbd/sql/mysql/schema/system_locale_string.sql b/dbd/sql/mysql/schema/system_locale_string.sql deleted file mode 100644 index 8727700..0000000 --- a/dbd/sql/mysql/schema/system_locale_string.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `system_locale_string` ( - `id` CHAR(35) NOT NULL, - `category` INT(10) UNSIGNED NOT NULL, - `enUS` TEXT NOT NULL, - `deDE` TEXT NOT NULL, - PRIMARY KEY (`id`) -) -COMMENT='Shall hold strings and its translation' -COLLATE='utf8_general_ci' -ENGINE=MyISAM; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_log.sql b/dbd/sql/mysql/schema/system_log.sql deleted file mode 100644 index 37f80a8..0000000 --- a/dbd/sql/mysql/schema/system_log.sql +++ /dev/null @@ -1,24 +0,0 @@ -CREATE TABLE `system_log` ( - `ID` INT(10) NOT NULL AUTO_INCREMENT, - `class` TEXT NOT NULL, - `message` TEXT NOT NULL, - `code` INT(11) NOT NULL, - `file` TEXT NOT NULL, - `line` INT(11) NOT NULL, - `trace` TEXT NOT NULL, - `ip` TEXT NOT NULL, - `querytime` DOUBLE NOT NULL, - `time` DATETIME NOT NULL, - `server_name` CHAR(255) NOT NULL, - `server_port` INT(10) UNSIGNED NOT NULL, - `request_uri` CHAR(255) NOT NULL, - `post` TEXT NOT NULL, - `http_referer` CHAR(255) NULL DEFAULT NULL, - `http_user_agent` TEXT NOT NULL, - `user` INT(11) NULL DEFAULT NULL, - `thrown` BIT(1) NOT NULL, - PRIMARY KEY (`ID`) -) -COLLATE='utf8_general_ci' -ENGINE=MyISAM -AUTO_INCREMENT=1; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_page.sql b/dbd/sql/mysql/schema/system_page.sql deleted file mode 100644 index 5f180f5..0000000 --- a/dbd/sql/mysql/schema/system_page.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE TABLE `system_page` ( - `group` INT(10) UNSIGNED NOT NULL, - `id` CHAR(50) NOT NULL, - `div` CHAR(50) NOT NULL, - `url` TEXT NOT NULL, - `func` CHAR(50) NOT NULL, - `php_class` CHAR(50) NOT NULL, - PRIMARY KEY (`id`, `div`, `group`) -) -COLLATE='utf8_unicode_ci' -ENGINE=InnoDB; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_rights.sql b/dbd/sql/mysql/schema/system_rights.sql deleted file mode 100644 index 2a9fe88..0000000 --- a/dbd/sql/mysql/schema/system_rights.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE `system_rights` ( - `ID` INT(10) NOT NULL AUTO_INCREMENT, - `name` CHAR(50) NOT NULL, - `description` CHAR(255) NOT NULL, - PRIMARY KEY (`ID`) -) -COLLATE='utf8_general_ci' -ENGINE=MyISAM -AUTO_INCREMENT=16; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_todo.sql b/dbd/sql/mysql/schema/system_todo.sql deleted file mode 100644 index a833791..0000000 --- a/dbd/sql/mysql/schema/system_todo.sql +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE `system_todo` ( - `ID` INT(10) NOT NULL AUTO_INCREMENT, - `class` TEXT NOT NULL, - `message` TEXT NOT NULL, - `message_hash` CHAR(40) NOT NULL, - `code` INT(10) UNSIGNED NOT NULL, - `file` CHAR(255) NOT NULL, - `line` INT(11) NOT NULL, - `trace` TEXT NOT NULL, - `ip` TEXT NOT NULL, - `querytime` DOUBLE NOT NULL, - `time` DATETIME NOT NULL, - `server_name` CHAR(255) NOT NULL, - `server_port` INT(10) UNSIGNED NOT NULL, - `request_uri` CHAR(255) NOT NULL, - `post` TEXT NOT NULL, - `http_referer` CHAR(255) NOT NULL, - `http_user_agent` TEXT NOT NULL, - `user` INT(10) UNSIGNED NOT NULL, - `thrown` BIT(1) NOT NULL, - `type` INT(11) NOT NULL DEFAULT '0', - `count` INT(11) NOT NULL DEFAULT '1', - `state` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`ID`), - UNIQUE INDEX `file_line_message` (`file`, `line`, `message_hash`) -) -COLLATE='utf8_general_ci' -ENGINE=MyISAM -AUTO_INCREMENT=92; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_user.sql b/dbd/sql/mysql/schema/system_user.sql deleted file mode 100644 index 65e1f64..0000000 --- a/dbd/sql/mysql/schema/system_user.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE `system_user` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `username` CHAR(32) NOT NULL, - `password_sha` CHAR(255) NULL DEFAULT NULL, - `password_md5` CHAR(255) NULL DEFAULT NULL, - `email` CHAR(255) NOT NULL, - `joindate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - `locale` CHAR(6) NOT NULL DEFAULT 'enUS', - `last_active` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', - `account_flag` INT(10) NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB -AUTO_INCREMENT=1; \ No newline at end of file diff --git a/dbd/sql/mysql/schema/system_user_to_rights.sql b/dbd/sql/mysql/schema/system_user_to_rights.sql deleted file mode 100644 index ecb3958..0000000 --- a/dbd/sql/mysql/schema/system_user_to_rights.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE `system_user_to_rights` ( - `rightID` INT(10) NOT NULL DEFAULT '0', - `userID` INT(10) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`rightID`, `userID`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB; \ No newline at end of file diff --git a/dbd/sql/pg/data/basic_locale_string.sql b/dbd/sql/pg/data/basic_locale_string.sql deleted file mode 100644 index 12bce7b..0000000 --- a/dbd/sql/pg/data/basic_locale_string.sql +++ /dev/null @@ -1,23 +0,0 @@ -DELETE FROM system.locale_string WHERE category = 1; -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_logout', 1, 'Logout', 'Ausloggen'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_login', 1, 'Login', 'Einloggen'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_register', 1, 'Register', 'Registrieren'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_username', 1, 'Username', 'Username'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_password', 1, 'Password', 'Passwort'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_email', 1, 'EMail', 'E-Mail2'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_last_active', 1, 'Last active', 'Zuletzt aktiv'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_join_date', 1, 'Joindate', 'Beitrittsdatum'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_locale', 1, 'Locale', 'Sprache'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_admin_rights', 1, 'Admin Rights', 'Admin Rechte'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_cancel', 1, 'Cancel', 'Abbrechen'); - -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_text_logout', 1, 'Logout before you leave!', 'Loggen Sie sie sich aus bevor Sie gehen!'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_text_login', 1, 'Login to your Website.', 'Loggen Sie sich in ihre Website ein.'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_text_register', 1, 'Register an Account', 'Register an Account'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_text_password_miss', 1, 'Cannot really remember your Password?', 'Cannot really remember your Password?'); - -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_placeholder_username', 1, 'peter / peter@world.org', 'peter / peter@world.org'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_placeholder_password', 1, 'my secret123', 'geheim567'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_placeholder_email', 1, 'peter@world.org', 'peter@world.org'); - -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('basic_state_login', 1, 'You are logged in.', 'You are logged in.'); \ No newline at end of file diff --git a/dbd/sql/pg/data/sai_api.sql b/dbd/sql/pg/data/sai_api.sql deleted file mode 100644 index c04f787..0000000 --- a/dbd/sql/pg/data/sai_api.sql +++ /dev/null @@ -1,148 +0,0 @@ -DELETE FROM system.api WHERE "group" = 42; - --- basic -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (0, 42, 0, -1, NULL, 'sai_mod', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1, 42, 1, 0, NULL, 'js', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (2, 42, 1, 0, NULL, 'css', NULL); --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (3, 42, 0, 0, NULL, 'page', NULL); - --- system_api -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (10, 42, 0, -1, NULL, 'call', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (11, 42, 0, 10, NULL, 'action', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (20, 42, 2, 11, 'login', 'username', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (21, 42, 2, 11, 'login', 'password_sha', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (22, 42, 2, 11, 'login', 'password_md5', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (23, 42, 2, 11, 'check', 'rightid', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (24, 42, 2, 11, 'create', 'username', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (25, 42, 2, 11, 'create', 'password_sha', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (26, 42, 2, 11, 'create', 'email', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (27, 42, 2, 11, 'create', 'locale', 'LANG'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (30, 42, 2, 10, 'files', 'cat', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (31, 42, 3, 30, 'files', 'id', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (50, 42, 2, 10, 'pagestates', 'group', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (51, 42, 1, 50, NULL, 'js', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (52, 42, 2, 51, NULL, 'group', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (55, 42, 1, 50, NULL, 'css', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (56, 42, 2, 55, NULL, 'group', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (40, 42, 4, -1, NULL, '_lang', 'LANG'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (41, 42, 4, -1, NULL, '_result', 'RESULT'); - --- specific stuff for mods -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_login', 'action', NULL); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (101, 42, 2, 100, 'login', 'username', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (102, 42, 2, 100, 'login', 'password_sha', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (103, 42, 2, 100, 'login', 'password_md5', 'ALL'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (110, 42, 2, 100, 'register', 'username', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (111, 42, 2, 100, 'register', 'password', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (112, 42, 2, 100, 'register', 'email', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (113, 42, 3, 100, 'register', 'locale', 'ALL'); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (200, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_log', 'action', NULL); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (201, 42, 3, 200, 'filter', 'filter', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (210, 42, 3, 200, 'error', 'error', 'INT'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (220, 42, 0, 200, 'stats', 'name', null); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (221, 42, 3, 220, null, 'filter', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (222, 42, 3, 220, null, 'db', 'STRING'); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (300, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_security', 'action', NULL); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (301, 42, 2, 300, 'user', 'username', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (302, 42, 3, 300, 'users', 'search', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (310, 42, 2, 300, 'addright', 'id', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (311, 42, 2, 300, 'addright', 'name', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (312, 42, 2, 300, 'addright', 'description', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (320, 42, 2, 300, 'deleteright', 'id', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (321, 42, 2, 300, 'deleterightconfirm', 'id', 'UINT'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (330, 42, 2, 300, 'addrightuser', 'rightid', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (331, 42, 2, 300, 'addrightuser', 'userid', 'UINT'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (340, 42, 2, 300, 'deleterightuser', 'rightid', 'UINT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (341, 42, 2, 300, 'deleterightuser', 'userid', 'UINT'); - - --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (400, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_sai_mods', 'action', NULL); - - --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (500, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_config', 'action', NULL); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (600, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_api', 'action', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (601, 42, 2, 600, 'addcall', 'ID', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (602, 42, 2, 600, 'addcall', 'group', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (603, 42, 2, 600, 'addcall', 'type', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (604, 42, 2, 600, 'addcall', 'parentID', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (605, 42, 2, 600, 'addcall', 'parentValue', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (606, 42, 2, 600, 'addcall', 'name', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (607, 42, 2, 600, 'addcall', 'verify', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (608, 42, 2, 600, 'deletecall', 'ID', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (609, 42, 2, 600, 'deletedialog', 'ID', 'INT'); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (700, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_locale', 'action', NULL); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (701, 42, 2, 700, 'load', 'id', 'LANG'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (702, 42, 2, 700, 'load', 'group', 'INT'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (710, 42, 2, 700, 'singleload', 'id', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (711, 42, 2, 700, 'singleload', 'lang', 'ALL'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (720, 42, 2, 700, 'delete', 'id', 'ALL'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (730, 42, 2, 700, 'add', 'id', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (731, 42, 2, 700, 'add', 'category', 'INT'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (740, 42, 2, 700, 'edit', 'id', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (741, 42, 2, 700, 'edit', 'lang', 'LANG'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (742, 42, 2, 700, 'edit', 'category', 'ALL'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (743, 42, 2, 700, 'edit', 'newtext', 'ALL'); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (800, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_files', 'action', NULL); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (801, 42, 2, 800, 'upload', 'cat', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (810, 42, 2, 800, 'del', 'cat', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (811, 42, 2, 800, 'del', 'id', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (820, 42, 2, 800, 'rn', 'cat', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (821, 42, 2, 800, 'rn', 'id', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (822, 42, 2, 800, 'rn', 'newid', 'STRING'); --- -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (830, 42, 2, 800, 'tab', 'name', 'STRING'); - - --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (900, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_cache', 'action', NULL); - - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1000, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_todo', 'action', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1001, 42, 2, 1000, 'todo', 'todo', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1002, 42, 2, 1000, 'open', 'todo', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1003, 42, 2, 1000, 'close', 'todo', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1004, 42, 2, 1000, 'add', 'todo', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1010, 42, 2, 1000, 'edit', 'todo', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1011, 42, 2, 1000, 'edit', 'message', 'STRING'); - - --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_docu', 'action', NULL); - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1200, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_cron', 'action', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1201, 42, 2, 1200, 'add', 'cls', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1202, 42, 2, 1200, 'add', 'min', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1203, 42, 2, 1200, 'add', 'hour', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1204, 42, 2, 1200, 'add', 'day', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1205, 42, 2, 1200, 'add', 'day_week', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1206, 42, 2, 1200, 'add', 'month', 'INT'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1208, 42, 2, 1200, 'del', 'cls', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1209, 42, 2, 1200, 'deldialog', 'cls', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1210, 42, 2, 1200, 'change', 'cls', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (1211, 42, 2, 1200, 'change', 'status', 'INT'); \ No newline at end of file diff --git a/dbd/sql/pg/data/sai_error_locale_string.sql b/dbd/sql/pg/data/sai_error_locale_string.sql deleted file mode 100644 index 98e4c3c..0000000 --- a/dbd/sql/pg/data/sai_error_locale_string.sql +++ /dev/null @@ -1,9 +0,0 @@ -DELETE FROM system.locale_string WHERE category = 43; -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_username_short', 43, 'Username is too short', 'Nutzername ist zu kurz'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_username_long', 43, 'Username is too long', 'Nutzername ist zu lang'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_username_miss', 43, 'Username required', 'Nutzername erfoderlich'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_password_miss', 43, 'Password required', 'Passwort erforderlich'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_password_long', 43, 'Password too long', 'Passwort zu lang'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_password_short', 43, 'Password too short', 'Passwort zu kurz'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_password_match', 43, 'Passwords do not match!', 'Passwords do not match!'); -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_error_email_wrong', 43, 'Invalid EMail!', 'Invalid EMail!'); \ No newline at end of file diff --git a/dbd/sql/pg/data/sai_locale_string.sql b/dbd/sql/pg/data/sai_locale_string.sql deleted file mode 100644 index 7ed052c..0000000 --- a/dbd/sql/pg/data/sai_locale_string.sql +++ /dev/null @@ -1,2 +0,0 @@ -DELETE FROM system.locale_string WHERE category = 42; -INSERT INTO system.locale_string ("id", "category", "enUS", "deDE") VALUES ('sai_mod_login_text', 42, 'Please login for developer access (if you are a developer).', 'Please login for developer access (if you are a developer).'); \ No newline at end of file diff --git a/dbd/sql/pg/data/system_api.sql b/dbd/sql/pg/data/system_api.sql deleted file mode 100644 index e555ee5..0000000 --- a/dbd/sql/pg/data/system_api.sql +++ /dev/null @@ -1,19 +0,0 @@ -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (10, 42, 0, -1, NULL, 'call', NULL); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (11, 42, 0, 10, NULL, 'action', NULL); - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (20, 42, 2, 11, 'login', 'username', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (21, 42, 2, 11, 'login', 'password_sha', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (22, 42, 2, 11, 'login', 'password_md5', 'STRING'); - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (23, 42, 2, 11, 'check', 'rightid', 'UINT'); - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (24, 42, 2, 11, 'create', 'username', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (25, 42, 2, 11, 'create', 'password_sha', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (26, 42, 2, 11, 'create', 'email', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (27, 42, 2, 11, 'create', 'locale', 'LANG'); - -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (30, 42, 2, 10, 'files', 'cat', 'STRING'); -INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (31, 42, 3, 30, 'files', 'id', 'STRING'); - --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (100, 0, 2, 0, 'files', 'cat', 'STRING'); --- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (101, 0, 3, 0, 'files', 'id', 'STRING'); \ No newline at end of file diff --git a/dbd/sql/pg/data/system_cron.sql b/dbd/sql/pg/data/system_cron.sql deleted file mode 100644 index 87cbb0a..0000000 --- a/dbd/sql/pg/data/system_cron.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO system.cron (class, min, hour, day, day_week, month, last_run, status) VALUES ('\SYSTEM\CRON\cron_log2sqlite', 0, 0, 0, 0, 0, NULL, 0); \ No newline at end of file diff --git a/dbd/sql/pg/data/system_rights.sql b/dbd/sql/pg/data/system_rights.sql deleted file mode 100644 index 5fb019b..0000000 --- a/dbd/sql/pg/data/system_rights.sql +++ /dev/null @@ -1,13 +0,0 @@ -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (1, 'SYS_SAI', 'SAI access right'); - -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (5, 'SYS_SAI_SECURITY', 'Allows access to the Security Module in SAI'); -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (6, 'SYS_SAI_SECURITY_RIGHTS_EDIT', 'Allows deleting, editing and adding of Right in the SAI module Security'); - -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (10, 'SYS_SAI_LOCALE', 'Allows access to the Locale Module in SAI to edit or add Multilanguage Text'); - -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (15, 'SYS_SAI_IMG', 'Allows access to the Image Module in SAI to delete or add Pictures'); - -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (20, 'SYS_SAI_API', 'SAI API Access right'); -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (21, 'SYS_SAI_API_EDIT', 'SAI API Edit right'); - -INSERT INTO system.rights (`ID`, `name`, `description`) VALUES (25, 'SYS_SAI_CRON', 'SAI Cron Access right'); \ No newline at end of file diff --git a/dbd/sql/pg/schema/schema.sql b/dbd/sql/pg/schema/schema.sql deleted file mode 100644 index 349ddc7..0000000 --- a/dbd/sql/pg/schema/schema.sql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE SCHEMA system - AUTHORIZATION username; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_api.sql b/dbd/sql/pg/schema/system_api.sql deleted file mode 100644 index 0bb4366..0000000 --- a/dbd/sql/pg/schema/system_api.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE system.api -( - "ID" integer NOT NULL, - "group" integer NOT NULL, - type integer NOT NULL, - "parentID" integer NOT NULL, - "parentValue" character varying(50), - name character varying(50) NOT NULL, - verify character varying(50), - CONSTRAINT system_api_pk PRIMARY KEY ("ID", "group") -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.api - OWNER TO username; diff --git a/dbd/sql/pg/schema/system_cache.sql b/dbd/sql/pg/schema/system_cache.sql deleted file mode 100644 index b2e6fd7..0000000 --- a/dbd/sql/pg/schema/system_cache.sql +++ /dev/null @@ -1,32 +0,0 @@ -CREATE TABLE system.cache -( - "ID" integer NOT NULL DEFAULT nextval('system."cache_ID_seq"'::regclass), - "CacheID" integer NOT NULL, - "Ident" character varying NOT NULL, - data bytea, - CONSTRAINT pk_system_cache_id PRIMARY KEY ("ID"), - CONSTRAINT unique_system_cache_cid_ident UNIQUE ("CacheID", "Ident") -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.cache - OWNER TO username; - --- Index: system."cache_CacheID_Ident_idx" - --- DROP INDEX system."cache_CacheID_Ident_idx"; - -CREATE INDEX "cache_CacheID_Ident_idx" - ON system.cache - USING btree - ("CacheID", "Ident" COLLATE pg_catalog."default"); - --- Index: system."cache_Ident_idx" - --- DROP INDEX system."cache_Ident_idx"; - -CREATE INDEX "cache_Ident_idx" - ON system.cache - USING btree - ("Ident" COLLATE pg_catalog."default"); \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_cron.sql b/dbd/sql/pg/schema/system_cron.sql deleted file mode 100644 index 650af2a..0000000 --- a/dbd/sql/pg/schema/system_cron.sql +++ /dev/null @@ -1,17 +0,0 @@ -CREATE TABLE system.cron -( - "class" character varying(255) NOT NULL, - "min" integer DEFAULT NULL, - "hour" integer DEFAULT NULL, - "day" integer DEFAULT NULL, - "day_week" integer DEFAULT NULL, - "month" integer DEFAULT NULL, - "last_run" timestamp with time zone DEFAULT NULL, - "status" integer NOT NULL DEFAULT 0, - PRIMARY KEY ("class") -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.log - OWNER TO dasense; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_locale_string.sql b/dbd/sql/pg/schema/system_locale_string.sql deleted file mode 100644 index 9a4c462..0000000 --- a/dbd/sql/pg/schema/system_locale_string.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE system.locale_string -( - id character varying(50) NOT NULL, - category integer NOT NULL DEFAULT 0, - "enUS" text, - "deDE" text, - CONSTRAINT system_locale_string_pk_id PRIMARY KEY (id) -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.locale_string - OWNER TO username; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_log.sql b/dbd/sql/pg/schema/system_log.sql deleted file mode 100644 index 3693664..0000000 --- a/dbd/sql/pg/schema/system_log.sql +++ /dev/null @@ -1,30 +0,0 @@ -CREATE TABLE system.log -( - "ID" integer NOT NULL DEFAULT nextval('system."sys_log_ID_seq"'::regclass), - class text NOT NULL, - message text NOT NULL, - code integer NOT NULL, - file text NOT NULL, - line integer NOT NULL, - trace text NOT NULL, - ip text NOT NULL, - querytime double precision NOT NULL, - "time" timestamp with time zone NOT NULL DEFAULT now(), - server_name character varying(255), - server_port integer, - request_uri character varying(512), - post text, - http_referer character varying(255), - http_user_agent text, - "user" integer, - thrown integer, - CONSTRAINT system_log_pk_id PRIMARY KEY ("ID"), - CONSTRAINT system_log_fk_user FOREIGN KEY ("user") - REFERENCES system."user" (id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.log - OWNER TO dasense; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_rights.sql b/dbd/sql/pg/schema/system_rights.sql deleted file mode 100644 index 02fe0a6..0000000 --- a/dbd/sql/pg/schema/system_rights.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE system.rights -( - "ID" integer NOT NULL DEFAULT nextval('system."user_rights_ID_seq"'::regclass), - name character varying(55) NOT NULL, - description character varying(255) NOT NULL, - CONSTRAINT system_rights_pk PRIMARY KEY ("ID") -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.rights - OWNER TO username; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_todo.sql b/dbd/sql/pg/schema/system_todo.sql deleted file mode 100644 index 41c5972..0000000 --- a/dbd/sql/pg/schema/system_todo.sql +++ /dev/null @@ -1,34 +0,0 @@ -CREATE TABLE system.todo -( - "ID" integer NOT NULL, - "class" text NOT NULL, - "message" text NOT NULL, - "message_hash" character varying(40) NOT NULL, - "code" integer NOT NULL, - "file" text NOT NULL, - "line" integer NOT NULL, - "trace" text NOT NULL, - "ip" text NOT NULL, - "querytime" double precision NOT NULL, - "time" timestamp with time zone NOT NULL DEFAULT now(), - server_name character varying(255), - server_port integer, - request_uri character varying(512), - post text, - http_referer character varying(255), - http_user_agent text, - "user" integer, - thrown integer, - "type" integer NOT NULL DEFAULT 0, - "count" integer NOT NULL DEFAULT 1, - "state" integer NOT NULL DEFAULT 0, - CONSTRAINT system_todo_pk_id PRIMARY KEY ("ID"), - CONSTRAINT system_todo_fk_user FOREIGN KEY ("user") - REFERENCES system."user" (id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.todo - OWNER TO dasense; \ No newline at end of file diff --git a/dbd/sql/pg/schema/system_user.sql b/dbd/sql/pg/schema/system_user.sql deleted file mode 100644 index 1b11fa2..0000000 --- a/dbd/sql/pg/schema/system_user.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE TABLE system."user" -( - id serial NOT NULL, - username character varying(32) NOT NULL, - password_sha character varying(255), - password_md5 character varying(255), - email character varying(255) NOT NULL, - joindate timestamp with time zone NOT NULL DEFAULT now(), - locale character varying(6) NOT NULL DEFAULT 'enUS'::character varying, - last_active timestamp with time zone NOT NULL DEFAULT now(), - account_flag integer, - CONSTRAINT system_user_pk_id PRIMARY KEY (id) -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system."user" - OWNER TO username; diff --git a/dbd/sql/pg/schema/system_user_to_rights.sql b/dbd/sql/pg/schema/system_user_to_rights.sql deleted file mode 100644 index 1fde6e6..0000000 --- a/dbd/sql/pg/schema/system_user_to_rights.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE system.user_to_rights -( - "rightID" integer NOT NULL, - "userID" integer NOT NULL, - CONSTRAINT "system_user_to_rights_fk_userID" FOREIGN KEY ("userID") - REFERENCES system."user" (id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION, - CONSTRAINT "system_user_to_rights_rightID" FOREIGN KEY ("rightID") - REFERENCES system.rights ("ID") MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION -) -WITH ( - OIDS=FALSE -); -ALTER TABLE system.user_to_rights - OWNER TO username; \ No newline at end of file diff --git a/dbd/sql/pg/util_copy_api_table_by_groupa.sql b/dbd/sql/pg/util_copy_api_table_by_groupa.sql deleted file mode 100644 index 3f6ba41..0000000 --- a/dbd/sql/pg/util_copy_api_table_by_groupa.sql +++ /dev/null @@ -1,13 +0,0 @@ --- delete old entries of group -DELETE FROM system.api where "group" = 101; --- get data from group 0 and write it in your group -INSERT INTO system.api ( "ID", "group","type","parentID","parentValue","name","verify" ) - SELECT "ID", - '101' as "group", -- target group - "type", - "parentID", - "parentValue", - "name", - "verify" - FROM system.api - WHERE "group" = 0; -- pattern group \ No newline at end of file diff --git a/dbd/tbl/UserLoginsTable.php b/dbd/tbl/UserLoginsTable.php deleted file mode 100644 index 690a1e3..0000000 --- a/dbd/tbl/UserLoginsTable.php +++ /dev/null @@ -1,14 +0,0 @@ -input_deviceinfo();} - public static function call_input_type_data($source,$json){ - $pars = new JSONParser($json, $source); - return $pars->input_data();} - - //#Imageoverlays - public static function call_map_algo_heatmapStd($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new heatmapStd_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_heatmapStd_flag_key($type){ - $imggen = new heatmapStd_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_heatmapStd_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new heatmapStd_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_heatmapRect($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new heatmapRect_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_heatmapRect_flag_key($type){ - $imggen = new heatmapRect_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_heatmapRect_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new heatmapRect_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_speedmap($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new speedmap_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_speedmap_flag_key($type){ - $imggen = new speedmap_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_speedmap_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new speedmap_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_differencemap($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new differencemap_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_differencemap_flag_key($type){ - $imggen = new differencemap_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_differencemap_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new differencemap_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_tramlines($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new tramlines_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_tramlines_flag_key($type){ - $imggen = new tramlines_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_tramlines_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new tramlines_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_tram($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new tram_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_tram_flag_key($type){ - $imggen = new tram_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_tram_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new tram_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - public static function call_map_algo_animationTest($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new animationTest_algo(); - return $imggen->generateTile($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_animationTest_flag_key($type){ - $imggen = new animationTest_algo(); - return $imggen->generateMapKey($type);} - public static function call_map_algo_animationTest_flag_markers($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new animationTest_algo(); - return $imggen->getMarkers($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - public static function call_map_algo_animationTest_flag_animation($x,$y,$zoom,$time_start,$time_end,$type,$provider){ - $imggen = new animationTest_algo(); - return $imggen->getAnimation($x,$y,$zoom,$time_start,$time_end,$type,$provider);} - - //#Analysis API - // insert new bonus area - public static function call_analysis_action_barea_mthd_insert($pswd,$json){ - return BonusAreaController::insert($pswd, $json);} - // get all bonus areas - public static function call_analysis_action_barea_mthd_getall(){ - return BonusAreaController::getall();} - // get all active bonus areas - public static function call_analysis_action_barea_mthd_getallactive(){ - return BonusAreaController::getallactive();} - // within a bonus area? - public static function call_analysis_action_barea_mthd_within($lat,$lng,$when){ - return BonusAreaController::within($lat, $lng, $when);} - - // get total statistics - public static function call_analysis_action_statistic_mthd_gettotal($useruid,$intval){ - return StatisticsController::getTotalUserStatistics($useruid,$intval);} - // get series statistics - public static function call_analysis_action_statistic_mthd_getseries($useruid){ - return StatisticsController::getTotalSeriesStatistics($useruid);} - // get 24 map projection - public static function call_analysis_action_statistic_mthd_projection24($useruid,$intval){ - return StatisticsController::getProjection24($intval, $useruid);} - - // get own rank - public static function call_analysis_action_rank_mthd_get($useruid,$acronym){ - return RankController::getRank($useruid, $acronym);} - // get own history ranks - public static function call_analysis_action_rank_mthd_gethist($useruid,$sort){ - return RankController::getRankHistoryByUser($useruid, $sort);} - // questions calls - public static function call_analysis_action_rank_mthd_is($useruid,$acronym){ - return RankController::isRank($useruid, $acronym);} - - // get all achievements by userUID - public static function call_analysis_action_achievement_mthd_getbyuser($useruid){ - return AchievementController::getReachedAchievements($useruid);} - // get all defined achievements conditions - public static function call_analysis_action_achievement_mthd_getallcond($useruid, $acronym){ - return AchievementController::getAllAchievementDefinitionCondition($acronym, $useruid);} - // get all defined achievements - public static function call_analysis_action_achievement_mthd_getalldefs($useruid, $acronym){ - return AchievementController::getAllAchievementDefinitionCondition($acronym, $useruid);} - - // get current ranking all - public static function call_analysis_action_ranking_mthd_all($useruid,$last){ - return RankingController::getRankingAll($useruid,$last);} - // get current ranking own - public static function call_analysis_action_ranking_mthd_own($useruid,$last){ - return RankingController::getRankingOwn($useruid,$last);} - - // get explore factor - public static function call_analysis_action_data_mthd_explore($lat,$lng,$radius,$endtime){ - return DataController::getExplore($lat, $lng, $radius, $endtime);} - // get cities by postal code - public static function call_analysis_action_data_mthd_citybyzip($zip){ - return DataController::queryByZip($zip);} - - // store registration id - public static function call_analysis_action_ctwodm_mthd_register($useruid, $regid, $deviceid){ - return MessageController::handleRegistrationId($regid, $useruid, $deviceid);} - // fetch new messages - public static function call_analysis_action_ctwodm_mthd_fetch($useruid, $last){ - return MessageController::fetchAllData($useruid,$last);} - - // call=locale - public static function call_locale($request,$lang){ - $starttime = microtime(true); - return JsonResult::toString($starttime, \SYSTEM\locale::getStrings($request, $lang));} - - //TODO remove -> backend - public function call_preprocessing1233423DONOTCALL(){ - PreprocessAll::process(); - } -}; \ No newline at end of file diff --git a/docu/apiclass/ApiVerify.php b/docu/apiclass/ApiVerify.php deleted file mode 100644 index eacf875..0000000 --- a/docu/apiclass/ApiVerify.php +++ /dev/null @@ -1,17 +0,0 @@ - 0 & $param < 10;} - public static function GOOGLEMAPCOORD ($param){ return self::UINT($param);} - public static function GOOGLEMAPZOOM ($param){ return self::UINT($param) && $param < 20;} - public static function WIERDTIMESTAMP ($param){ return (strtotime($param)==false) ? false : true;} - public static function SENSORPROVIDER ($param){ return true;} //TODO remove this param - public static function LATLONCOORD ($param){ return self::FLOAT($param) && floatval($param) >= 0 && floatval($param) <= 180;} - public static function USERNAME ($param){ return self::STRING($param) && strlen($param) >=3 && strlen($param) <= 30;} - public static function PASSWORD ($param){ return self::STRING($param) && strlen($param) >=5 && strlen($param) <= 16;} - public static function HASH ($param){ return preg_match("^[0-9A-Fa-f]+$^", $param) != 0 && strlen($param) >=5;} - public static function PASSHASH ($param){ return self::PASSWORD($param) || self::HASH($param);} - public static function EMAIL ($param){ return filter_var($param, FILTER_VALIDATE_EMAIL);} - public static function ARRAYINT ($param){ return self::ARY($param) || self::INT($param);} -} \ No newline at end of file diff --git a/docu/apiclass/PageApi.php b/docu/apiclass/PageApi.php deleted file mode 100644 index c23ab93..0000000 --- a/docu/apiclass/PageApi.php +++ /dev/null @@ -1,110 +0,0 @@ -getConstants(); - $line_end = $class->getEndLine(); - $extension_name = $class->getExtensionName(); - $filename = $class->getFileName(); - $interfaces = $class->getInterfaceNames(); - $methods = $class->getMethods(); - $modifiers = $class->getModifiers(); - $name_long = $class->getName(); - $namespace = $class->getNamespaceName(); - $properties = $class->getProperties(); - $name_short = $class->getShortName(); - $line_start = $class->getStartLine(); - $properties_static = $class->getStaticProperties(); - $in_namespace = $class->inNamespace(); - $is_abstract = $class->isAbstract(); - $is_final = $class->isFinal(); - $is_instantiable = $class->isInstantiable(); - $is_interace = $class->isInterface(); - $is_internal = $class->isInternal(); - $is_iterateable = $class->isIterateable(); - $is_user_defined = $class->isUserDefined(); - - $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); - //$con->query('SELECT count(*) FROM `system_code_docu_class` WHERE ') - $con->prepare( 'insert_class', - "INSERT INTO `system_code_docu_class` (`class`, `name`, `namespace`, `dead`, `line_start`, `line_end`, `file`, `abstract`, `final`, `instantiable`, `interface`, `internal`, `iterateable`, `userdefined`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", - array($name_long,$name_short,$namespace,(int)false,$line_start,$line_end,$filename,(int)$is_abstract,(int)$is_final,(int)$is_instantiable,(int)$is_interace,(int)$is_internal,(int)$is_iterateable,(int)$is_user_defined)); - - - } -} \ No newline at end of file diff --git a/docu/docu.php b/docu/docu.php deleted file mode 100644 index e073f91..0000000 --- a/docu/docu.php +++ /dev/null @@ -1,25 +0,0 @@ - 0, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>-1, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'call', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 45, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'geopoint', \DBD\APITable::FIELD_NAME =>'datatype', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 120, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'login', \DBD\APITable::FIELD_NAME =>'compatibility', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 5, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'map', \DBD\APITable::FIELD_NAME =>'algo', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 6, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'key', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 16, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>6, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'type', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORTYPE'), - array(\DBD\APITable::FIELD_ID => 7, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'markers', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 8, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'animation', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 17, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'x', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 18, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'y', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 19, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'zoom', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPZOOM'), - array(\DBD\APITable::FIELD_ID => 20, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'from', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 21, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'to', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 22, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'type', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORTYPE'), - array(\DBD\APITable::FIELD_ID => 23, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>7, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'provider', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORPROVIDER'), - array(\DBD\APITable::FIELD_ID => 9, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'x', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 10, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'y', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 11, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'zoom', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPZOOM'), - array(\DBD\APITable::FIELD_ID => 12, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'from', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 13, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'to', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 14, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'type', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORTYPE'), - array(\DBD\APITable::FIELD_ID => 15, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>5, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'provider', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORPROVIDER'), - array(\DBD\APITable::FIELD_ID => 132, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>130, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'password', \DBD\APITable::FIELD_ALLOWEDVALUES =>'PASSWORD'), - array(\DBD\APITable::FIELD_ID => 111, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>110, \DBD\APITable::FIELD_PARENTVALUE =>'data', \DBD\APITable::FIELD_NAME =>'source', \DBD\APITable::FIELD_ALLOWEDVALUES =>'INPUTSOURCE'), - array(\DBD\APITable::FIELD_ID => 110, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'input', \DBD\APITable::FIELD_NAME =>'type', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 131, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>130, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'username', \DBD\APITable::FIELD_ALLOWEDVALUES =>'USERNAME'), - array(\DBD\APITable::FIELD_ID => 130, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'create', \DBD\APITable::FIELD_NAME =>'compatibility', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 126, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>125, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'username', \DBD\APITable::FIELD_ALLOWEDVALUES =>'USERNAME'), - array(\DBD\APITable::FIELD_ID => 125, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'available', \DBD\APITable::FIELD_NAME =>'compatibility', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'), - array(\DBD\APITable::FIELD_ID => 123, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>120, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'hashed', \DBD\APITable::FIELD_ALLOWEDVALUES =>'BOOL'), - array(\DBD\APITable::FIELD_ID => 122, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>120, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'password', \DBD\APITable::FIELD_ALLOWEDVALUES =>'PASSWORD'), - array(\DBD\APITable::FIELD_ID => 121, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>120, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'username', \DBD\APITable::FIELD_ALLOWEDVALUES =>'USERNAME'), - array(\DBD\APITable::FIELD_ID => 34, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'x', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 35, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'y', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPCOORD'), - array(\DBD\APITable::FIELD_ID => 36, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'zoom', \DBD\APITable::FIELD_ALLOWEDVALUES =>'GOOGLEMAPZOOM'), - array(\DBD\APITable::FIELD_ID => 37, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'from', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 38, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'to', \DBD\APITable::FIELD_ALLOWEDVALUES =>'WIERDTIMESTAMP'), - array(\DBD\APITable::FIELD_ID => 39, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'type', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORTYPE'), - array(\DBD\APITable::FIELD_ID => 40, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>8, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'provider', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORPROVIDER'), - array(\DBD\APITable::FIELD_ID => 43, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'geopoint', \DBD\APITable::FIELD_NAME =>'radius', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 42, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'geopoint', \DBD\APITable::FIELD_NAME =>'long', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 41, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'geopoint', \DBD\APITable::FIELD_NAME =>'lat', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 60, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'account', \DBD\APITable::FIELD_NAME =>'action', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 140, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'sensor', \DBD\APITable::FIELD_NAME =>'sensorid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'INT'), - array(\DBD\APITable::FIELD_ID => 1, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'page', \DBD\APITable::FIELD_NAME =>'page', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 47, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>46, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'lat', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 48, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>46, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'long', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 49, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>46, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'radius', \DBD\APITable::FIELD_ALLOWEDVALUES =>'UINT'), - array(\DBD\APITable::FIELD_ID => 61, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'login', \DBD\APITable::FIELD_NAME =>'username', \DBD\APITable::FIELD_ALLOWEDVALUES =>'USERNAME'), - array(\DBD\APITable::FIELD_ID => 51, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>46, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'datatype', \DBD\APITable::FIELD_ALLOWEDVALUES =>'SENSORTYPE'), - array(\DBD\APITable::FIELD_ID => 62, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'login', \DBD\APITable::FIELD_NAME =>'password', \DBD\APITable::FIELD_ALLOWEDVALUES =>'PASSWORD'), - array(\DBD\APITable::FIELD_ID => 63, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'login', \DBD\APITable::FIELD_NAME =>'hashed', \DBD\APITable::FIELD_ALLOWEDVALUES =>'BOOL'), - array(\DBD\APITable::FIELD_ID => 64, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'check', \DBD\APITable::FIELD_NAME =>'rightid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'UINT'), - array(\DBD\APITable::FIELD_ID => 65, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'create', \DBD\APITable::FIELD_NAME =>'username', \DBD\APITable::FIELD_ALLOWEDVALUES =>'USERNAME'), - array(\DBD\APITable::FIELD_ID => 66, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'create', \DBD\APITable::FIELD_NAME =>'password', \DBD\APITable::FIELD_ALLOWEDVALUES =>'PASSWORD'), - array(\DBD\APITable::FIELD_ID => 67, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'create', \DBD\APITable::FIELD_NAME =>'email', \DBD\APITable::FIELD_ALLOWEDVALUES =>'EMAIL'), - array(\DBD\APITable::FIELD_ID => 68, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>60, \DBD\APITable::FIELD_PARENTVALUE =>'create', \DBD\APITable::FIELD_NAME =>'hashed', \DBD\APITable::FIELD_ALLOWEDVALUES =>'BOOL'), - array(\DBD\APITable::FIELD_ID => 70, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'analysis', \DBD\APITable::FIELD_NAME =>'action', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 71, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>70, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'mthd', \DBD\APITable::FIELD_ALLOWEDVALUES =>NULL), - array(\DBD\APITable::FIELD_ID => 72, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'within', \DBD\APITable::FIELD_NAME =>'lat', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 73, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'within', \DBD\APITable::FIELD_NAME =>'lng', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 74, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'within', \DBD\APITable::FIELD_NAME =>'when', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 75, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'gettotal', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 76, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'gettotal', \DBD\APITable::FIELD_NAME =>'intval', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 77, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getseries', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 78, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'projection24', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 79, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'projection24', \DBD\APITable::FIELD_NAME =>'intval', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 80, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'get', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 81, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'get', \DBD\APITable::FIELD_NAME =>'acronym', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 82, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'gethist', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 83, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'gethist', \DBD\APITable::FIELD_NAME =>'sort', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 84, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'is', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 85, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'is', \DBD\APITable::FIELD_NAME =>'acronym', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 86, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getbyuser', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 87, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getallcond', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 88, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getallcond', \DBD\APITable::FIELD_NAME =>'acronym', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 89, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getalldefs', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 90, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'getalldefs', \DBD\APITable::FIELD_NAME =>'acronym', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 91, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'all', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 92, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'all', \DBD\APITable::FIELD_NAME =>'last', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 93, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'own', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 94, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'own', \DBD\APITable::FIELD_NAME =>'last', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 95, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'register', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 96, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'register', \DBD\APITable::FIELD_NAME =>'regid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 97, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'register', \DBD\APITable::FIELD_NAME =>'deviceid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 98, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'fetch', \DBD\APITable::FIELD_NAME =>'useruid', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 99, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'fetch', \DBD\APITable::FIELD_NAME =>'last', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 100, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'explore', \DBD\APITable::FIELD_NAME =>'lat', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 101, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'explore', \DBD\APITable::FIELD_NAME =>'lng', \DBD\APITable::FIELD_ALLOWEDVALUES =>'LATLONCOORD'), - array(\DBD\APITable::FIELD_ID => 102, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'explore', \DBD\APITable::FIELD_NAME =>'radius', \DBD\APITable::FIELD_ALLOWEDVALUES =>'UINT'), - array(\DBD\APITable::FIELD_ID => 103, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'explore', \DBD\APITable::FIELD_NAME =>'endtime', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 104, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>71, \DBD\APITable::FIELD_PARENTVALUE =>'citybyzip', \DBD\APITable::FIELD_NAME =>'zip', \DBD\APITable::FIELD_ALLOWEDVALUES =>'ALL'), - array(\DBD\APITable::FIELD_ID => 112, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>110, \DBD\APITable::FIELD_PARENTVALUE =>'data', \DBD\APITable::FIELD_NAME =>'json', \DBD\APITable::FIELD_ALLOWEDVALUES =>'JSON'), - array(\DBD\APITable::FIELD_ID => 113, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>110, \DBD\APITable::FIELD_PARENTVALUE =>'deviceinfo', \DBD\APITable::FIELD_NAME =>'json', \DBD\APITable::FIELD_ALLOWEDVALUES =>'JSON'), - array(\DBD\APITable::FIELD_ID => 133, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>130, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'email', \DBD\APITable::FIELD_ALLOWEDVALUES =>'EMAIL'), - array(\DBD\APITable::FIELD_ID => 134, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>130, \DBD\APITable::FIELD_PARENTVALUE =>NULL, \DBD\APITable::FIELD_NAME =>'hashed', \DBD\APITable::FIELD_ALLOWEDVALUES =>'BOOL'), - array(\DBD\APITable::FIELD_ID => 135, \DBD\APITable::FIELD_FLAG =>1, \DBD\APITable::FIELD_PARENTID =>0, \DBD\APITable::FIELD_PARENTVALUE =>'log', \DBD\APITable::FIELD_NAME =>'json', \DBD\APITable::FIELD_ALLOWEDVALUES =>'JSON'), - array(\DBD\APITable::FIELD_ID => 46, \DBD\APITable::FIELD_FLAG =>0, \DBD\APITable::FIELD_PARENTID =>1, \DBD\APITable::FIELD_PARENTVALUE =>'geopoint', \DBD\APITable::FIELD_NAME =>'explore', \DBD\APITable::FIELD_ALLOWEDVALUES =>'FLAG'));*/ - -$api = new SYSTEM\API\Api($call, new ApiVerify(), new ApiClass()); - -$json = json_decode(file_get_contents("php://input"), true); - -$starttime = microtime(true); -try { - if($json){ - echo $api->CALL($json); - } else { - echo $api->CALL(array_merge($_POST,$_GET));} -} catch(Exception $e){ - echo JsonResult::error($starttime, $e); -} \ No newline at end of file diff --git a/docu/index/index.php b/docu/index/index.php deleted file mode 100644 index 1589646..0000000 --- a/docu/index/index.php +++ /dev/null @@ -1,36 +0,0 @@ -6, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>5, \DBD\PAGETable::FIELD_PARENTVALUE=>'sensor', \DBD\PAGETable::FIELD_NAME=>'sensorIDs', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>5, \DBD\PAGETable::FIELD_FLAG=>0, \DBD\PAGETable::FIELD_PARENTID=>-1, \DBD\PAGETable::FIELD_PARENTVALUE=>NULL, \DBD\PAGETable::FIELD_NAME=>'action', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>0, \DBD\PAGETable::FIELD_FLAG=>0, \DBD\PAGETable::FIELD_PARENTID=>-1, \DBD\PAGETable::FIELD_PARENTVALUE=>NULL, \DBD\PAGETable::FIELD_NAME=>'module', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>1, \DBD\PAGETable::FIELD_FLAG=>0, \DBD\PAGETable::FIELD_PARENTID=>0, \DBD\PAGETable::FIELD_PARENTVALUE=>NULL, \DBD\PAGETable::FIELD_NAME=>'action', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>2, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'sensor', \DBD\PAGETable::FIELD_NAME=>'sensorIDs', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>3, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'login', \DBD\PAGETable::FIELD_NAME=>'old_module', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>4, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'login', \DBD\PAGETable::FIELD_NAME=>'old_action', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>7, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'coord', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>8, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'datatype', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>9, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>1, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'radius', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>10, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>5, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'coord', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>11, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>5, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'datatype', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'), - array(\DBD\PAGETable::FIELD_ID=>12, \DBD\PAGETable::FIELD_FLAG=>1, \DBD\PAGETable::FIELD_PARENTID=>5, \DBD\PAGETable::FIELD_PARENTVALUE=>'geopoint', \DBD\PAGETable::FIELD_NAME=>'radius', \DBD\PAGETable::FIELD_ALLOWEDVALUES=>'ALL'));*/ - -$page = new \SYSTEM\PAGE\PageApi( $call, new SYSTEM\verifyclass(), new PageApi()); - -try{ - echo $page->CALL(array_merge($_POST,$_GET))->html(); -} catch(Exception $e) { - echo $e; - $page = new default_page(); - echo $page->html(); -} - -?> \ No newline at end of file diff --git a/docu/register_sys_docu.php b/docu/register_sys_docu.php deleted file mode 100644 index 500cb8d..0000000 --- a/docu/register_sys_docu.php +++ /dev/null @@ -1,2 +0,0 @@ - - -SYSTEM provides several management techiques and general purpose funcionality -for a PHP Environment. All features of system are optional for using, altho -might be dependent on other features or standarts SYSTEM provides. - -Following funcionality is provided by SYSTEM: - - * api - php post/get input validation and handling - * cache - cache using the database as storage for images/other data - * config - configuration of a SYSTEM environment, can be extended for project purposes - * db - database connection, query and prepare functionality, supporting MYSQL and POSTGRESQL, QQ - * docu - register documentation right were it is - show it in the backend - * files - file management & external access api - * log - exceptionhandling - including dbwrite options - * page - html page generation scheme - * sai - Admininterface - * security - Userlogin, register, rights, (email), session management - * system - autoload, database texts, path generation, systemconfig, time \ No newline at end of file diff --git a/docu/system/2.license.md b/docu/system/2.license.md deleted file mode 100644 index a67cf9a..0000000 --- a/docu/system/2.license.md +++ /dev/null @@ -1,21 +0,0 @@ -License -======= -Copyright (c) 2014 Ulf Gebhardt - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/docu/system/3.getting started.md b/docu/system/3.getting started.md deleted file mode 100644 index eb05ebb..0000000 --- a/docu/system/3.getting started.md +++ /dev/null @@ -1,86 +0,0 @@ -##Getting started - -This is an introduction how to setup a webpage with system - -##Setup - -Create a new git repository, initialize a submodule for system, check it out, -create a folder named like your project, it will contain all project files, -create a api.php, index.php, sai.php and config.php file. -Dependent on what part of SYSTEM you want to use leave out api or index. - -* D: system -* D: project -* F: api.php -* F: index.php -* F: sai.php -* F: config.php - -File api.php - console of your webpage (jquery...): - - html(); - -File sai.php - Admin Interface: - - html(); - -File config.php - Your Server and Project config - - mojotrollz, © WebCraft Media 2013'), - array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS, array('deDE', 'enUS')), - array(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_LANG, 'enUS')); - diff --git a/docu/system/system.api.md b/docu/system/system.api.md deleted file mode 100644 index b1a46aa..0000000 --- a/docu/system/system.api.md +++ /dev/null @@ -1,69 +0,0 @@ -SYSTEM API ----------- - -The SYSTEM-Api allows you to validate post/get/jsonpost parameters to function-calls. -This allows you to direct calls to your website to a class which can process those -calls in a typesave maner. - -WARNING: This Method breaks inheritance in some use-cases! - -How it Works ------------- - -Mapping of URLs to Functions -> thats it basicly - -The URL - - http://mypage.net/api.php?call=test&action=bla¶m1=1¶m2=abc - -maps to - - public static function call_test_action_bla($param1,$param2){} - -if you set your database properly: - - INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1, 0, 0, -1, NULL, 'call', NULL); - INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (2, 0, 0, 1, 'test', 'action', NULL); - INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (3, 0, 2, 2, 'bla', 'param1', 'UINT'); - INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (4, 0, 2, 2, 'bla', 'param2', 'STRING'); - -(note that the params are on the same level of the tree) -now you just need a php class with your function - - look there - echo \SYSTEM\API\api::run('my_verify', 'api_dasense',$json, 25); - -note the use of api group 25 - this allows you to construct several apis. \ No newline at end of file diff --git a/docu/system/system.cache.md b/docu/system/system.cache.md deleted file mode 100644 index 463d5d1..0000000 --- a/docu/system/system.cache.md +++ /dev/null @@ -1,2 +0,0 @@ -cache ------ \ No newline at end of file diff --git a/docu/system/system.config.md b/docu/system/system.config.md deleted file mode 100644 index 7fd5b2d..0000000 --- a/docu/system/system.config.md +++ /dev/null @@ -1,2 +0,0 @@ -config ------- \ No newline at end of file diff --git a/docu/system/system.db.md b/docu/system/system.db.md deleted file mode 100644 index 3f9a814..0000000 --- a/docu/system/system.db.md +++ /dev/null @@ -1,2 +0,0 @@ -db --- \ No newline at end of file diff --git a/docu/system/system.db.qq.md b/docu/system/system.db.qq.md deleted file mode 100644 index d98b5a4..0000000 --- a/docu/system/system.db.qq.md +++ /dev/null @@ -1,76 +0,0 @@ -QQ Objects ----------- - -Referenz: - -QQ-Objekte können von zwei verschiedenen Klassen erben: - - - QQ (quick query) - - QP (quick prepare) - -Class Definitions: - - class MY_QUERY_QQ extends \SYSTEM\DB\QQ {} - class MY_QUERY_QP extends \SYSTEM\DB\QP {} - - -Je nachdem was du benutzt kannst du in deinem SQL String $1,$2,$3... -benutzen oder nicht (prepare hat $1..., query hat das nicht). -Folglich mache alle Querys ohne Paramter als QQ, alle mit als QP Klasse! - -Der Unterschied der Klassen ist einfach, dass bei allen Funktionen von QP -ein array mit den Parametern übergeben werden muss. - -Es gibt 4 Funktionen - - - QQ (selber über die daten loopen) - - Q1 (geb mir genau eine zeile) - - QA (geb mir alle Zeilen) - - QI (Insert/Delete... -> returns true) - -Q1 --- - - MY_QUERY_QQ::Q1() - -> array(feld1 => value, feld2 => value...) - - MY_QUERY_QP::Q1(array(param1,param2,...)) - -> array(feld1 => value, feld2 => value...) - -QA --- - - MY_QUERY_QQ::QA() - -> array(array(feld1 => value, feld2 => value...), array(feld1 => ...)) - MY_QUERY_QP::QA(array(param1,param2,...)) - -> array(array(feld1 => value, feld2 => value...), array(feld1 => ...)) - -QI --- - - MY_QUERY_QQ::QI() - -> true/false - MY_QUERY_QP::QI(array(param1,param2,...)) - -> true/false - -QQ --- - - $result = array(); - $rows = MY_QUERY_QQ::QQ(); - while($row = $rows->next()){ //1. über alle loopen - $row[field1] = 5; - $result[] = $row; - } - - -> QQ Benutzen, um das Datenbank Ergebnis auszuschmücken ohne zweimal über - das ergebniss zu loopen: - -Wrong ------ - $result = array(); - $rows = MY_QUERY_QQ::QA(); // 1. über alle loppen - foreach($rows as $row){ // 2. über alle loopen - $row[field1] = 5; - $result[] = $row; - } \ No newline at end of file diff --git a/docu/system/system.docu.md b/docu/system/system.docu.md deleted file mode 100644 index e69de29..0000000 diff --git a/docu/system/system.log.md b/docu/system/system.log.md deleted file mode 100644 index e69de29..0000000 diff --git a/docu/system/system.page.md b/docu/system/system.page.md deleted file mode 100644 index e69de29..0000000 diff --git a/docu/system/system.sai.md b/docu/system/system.sai.md deleted file mode 100644 index e69de29..0000000 diff --git a/docu/system/system.security.md b/docu/system/system.security.md deleted file mode 100644 index e69de29..0000000 diff --git a/docu/system/system.system.md b/docu/system/system.system.md deleted file mode 100644 index 8210b3a..0000000 --- a/docu/system/system.system.md +++ /dev/null @@ -1,188 +0,0 @@ -####autoload - - Komuniktationsprobleme der Neuzeit ;-) - - * E: Entwickler - * A: Admin - - * ##### Lösung - - * ##### * Lösung Ignorieren - ------ - - * E: 23:36:01: Hi A - * E: 23:36:13: ich habe noch mal eine Frage an dich wegen Project21 - * E: 23:36:32: ich habe es ja soweit hinbekommen die Visualisierung auf unser Handy zu bekommen - * E: 23:36:58: ich dachte mir nun, das ich jetzt am Besten einen bestehenden Algorithmus kopiere - in umbenenne und dann daran unsere Modifikationen vornehme - * E: 23:37:20: aber leider scheint das mit dem kopieren und hinzufügen in der api.php nicht getan zu sein - * E: 23:37:33: muss ich dabei sonst noch etwas beachten ? - * E: 23:37:52: weil derzeit bekomme ich in der autoload.php unter system/system - - - A: 23:37:54: in der tabelle system.api müssen zeilen hinzugefügt werden - - * E: 23:38:01: den fehler class not found - - - A: 23:38:09: dann fehlt wohl ne klasse^^ - - * E: 23:38:48: mmh ich will keine neuen parameter einfügen wenn du das meinst - * E: 23:38:54: leidiglich z.b. statt heatmapRect - * E: 23:39:02: heatMapRectCoverage callen z.B. - - - ##### A: 23:39:17: die klasse muss so heißen wie die datei - - A: 23:39:23: und geautoloaded werden - - * E: 23:40:22: mmh ich habe jetzt im ordner preprocessing in die autload.inc.php eine zeile hinzugefügt gehabt - * E: 23:40:28: das scheint dann aber wohl nicht die richtige zu sein - * E: 23:40:35: für die visualisierungs algorithmen - * ##### * E: 23:40:42: weil Datei und Ordner heißen schon gleich - - * ##### * E: 23:40:45: das habe ich berücksichtigt - - - A: 23:41:01: dann ist der ordner in der die klasse liegt wohl nicht registriert - - * E: 23:42:28: mmh das stimmt - * E: 23:42:39: aber in welcher autload.inc.php mache ich das bekannt ? - - - A: 23:42:48: in der nächsten^^ - - A: 23:42:55: die die am nächsten dran liegt - - A: 23:42:59: aber prinzipiell egal - - * ##### * E: 23:43:20: mmh dann hätte ich das aber richtig gemacht - - - A: 23:43:39: kp er sagt dir ja class not found - - A: 23:43:47: sprich er kann die klasse nicht laden - - * E: 23:43:52: korrekt - * E: 23:43:59: den ordner scheint er aber zu finden - - - A: 23:44:26: sonst schmiert der autoload mit nem fehler ab, ja - - A: 23:44:47: kp -> vll ist es einfach nicht hochgeladen, großkleinschreibeung... - - * E: 23:45:05: mmh - * E: 23:45:07: ich schau mal - * E: 23:45:10: vielleicht mal alles klein schreiben - * E: 23:47:02: mmh nein - * E: 23:47:06: auch das hat nichts gebracht - - - A: 23:52:23: kp - - A: 23:52:29: sonst fällt mir nix ein - - * E: 23:52:50: aber in der Datenbank muss dafür nichts geändert werden oder ? - - - A: 23:52:58: nö - - * E: 23:52:58: die Parameter die ich übergebe sollen ja die selben bleiben - * E: 23:53:01: kk - - - A: 23:53:06: hats n namespace? - - * E: 23:53:09: das ist schon mal gut zu wissen - - - A: 23:53:13: den musst du beim autloaden angeben - - * E: 23:53:20: mmh wie meinst du das ? - - - A: 23:53:27: namespace SYSTEM/LOG - - A: 23:53:41: dann musste beim autoload SYSTEM/LOG mit angeben - - * E: 23:54:20: in der algorithmen klasse selbst nicht nein - - - A: 23:54:31: dann müsste es passen - - * E: 23:54:59: mmh seltsam seltsam - * E: 23:55:06: ich stelle ich wahrscheinlich nur zu blöd an ^^ - - - A: 23:55:16: xD ich hab keinen plan was du da schaffst - - ##### A: 23:55:27: aber prüfe nochmal genau groß und kleinschreibung - - * E: 23:55:30: eigentlich sollte es doch nicht so kompliziert sein - - - ##### A: 23:55:31: KlassenName.php - - * E: 23:55:40: den ordner kopiern umbenennen - * E: 23:55:41: ne is eientlich ziemlich simpel - - - A: 23:56:00: der pfad im autoload haste angepasst?!^^ - - * E: 23:56:23: ja da hab ich noch einen hinzugefügt - - - A: 23:56:36: ajo - - A: 23:56:46: wenn er den ordner net findet schreit er auch - - * E: 23:56:54: genau - * E: 23:56:59: das hab ich ja auch ausprobiert - * E: 23:57:02: durch umbennenn vom ordner - * E: 23:57:07: den findet er also scheints - - - A: 23:57:12: vll ist es beim aufruf falsch geschrieben? - - * E: 23:59:06: /home/mona-srv/da-sense/test2/system/system/autoload.php - * E: 23:59:11: in der datei schmiert das system dann ab - * E: 23:59:30: aber das hilft mir auch nicht so richtig weiter - - - A: 23:59:32: joa mit der message class not found? - - * E: 23:59:37: exakt - - - A: 23:59:41: geb dir mal den klassennamen aus - - A: 23:59:50: und schau obs der gleiche ist - - * E: 00:00:41: public static function autoload($class){ - $classns = self::getClassNamespaceFromClass($class); - - if(!self::autoload_($classns[0],$classns[1]) || (!class_exists($class) && !interface_exists($class))){ - throw new \SYSTEM\LOG\ERROR("Class not found: ".$class);} - - return true; - } - * E: 00:00:48: mmh was davon ist der klassenname ? :D - * E: 00:00:55: classns[0] ? - - - A: 00:00:57: throw new \SYSTEM\LOG\ERROR("Class not found: ".$class);} - - A: 00:01:05: sollte dir den klassennamen schon sagen - - * E: 00:01:17: Class not found: s_algo - - - A: 00:01:22: ajo - - * E: 00:01:23: habs mal auf 1 buchstaben reduziert - - - ##### A: 00:01:26: da haste dein problem - - * E: 00:01:31: um schreibfehler auszuschließen - * E: 00:01:33: mmh ? - - - ##### A: 00:01:38: s_algo - - - ##### A: 00:01:45: so soll die klasse heißen - - - ##### A: 00:01:56: s_algo.php - - * ##### * E: 00:01:58: ja so heißt sie - * E: 00:02:03: und der ornder heißt auch s_algo - - - ##### A: 00:02:11: und die klasse heißt auch s_algo? - - * E: 00:02:41: oh man - ja ich bin echt zu blöd :( - - - A: 00:03:00: das war das erste, zweite und dritte was ich dich gefragt hab - - * E: 00:03:05: zu viele namen :/ - - - ##### A: 00:03:07: ob die klasse wie die datei heißt - - * E: 00:03:12: tut mir leid - - - A: 00:03:15: np - - * E: 00:03:30: ich habe dateinamen als ordnernamen fehl interpretiert - - - A: 00:03:46: kk^^ - - * E: 00:03:50: jetzt gehts - besten Dank. - * E: 00:04:04: bin mit blödheit geschlagen echt - * E: 00:04:53: danke - dann kann ich nämlich jetzt so nach herzenslust modifizieren - * E: 00:04:57: ohne das es was macht - - - A: 00:06:47: super, wenns läuft ;-) \ No newline at end of file diff --git a/files/autoload.inc.php b/files/autoload.inc.php deleted file mode 100644 index 6b69bd4..0000000 --- a/files/autoload.inc.php +++ /dev/null @@ -1,4 +0,0 @@ - path) - - public static function registerFolder($path, $cat) { - self::$folders[$cat] = $path;} - - public static function get($cat = null, $id = null, $returnasjson = false) { - if (!$cat) { - return $returnasjson ? \SYSTEM\LOG\JsonResult::toString(self::$folders) : self::$folders;} - - if (!array_key_exists($cat, self::$folders)) { - throw new \SYSTEM\LOG\ERROR("No matching Cat '" . $cat . "' found.");} - - $folder = self::getFolder(self::$folders[$cat]); - if ($id == null) { - return $returnasjson ? \SYSTEM\LOG\JsonResult::toString($folder) : $folder;} - - if (!in_array($id, $folder)) { - throw new \SYSTEM\LOG\ERROR("No matching ID '" . $id . "' found.");} - - $ext = pathinfo(self::$folders[$cat].$id); - $ext = strtoupper(array_key_exists('extension', $ext) ? $ext['extension'] : ''); - if(\SYSTEM\HEADER::available($ext)){ - call_user_func('\SYSTEM\HEADER::'.$ext); - }else{ - \SYSTEM\HEADER::FILE($id);} - - if(!self::file_get_contents_chunked(self::$folders[$cat].$id,4096,function($chunk,&$handle,$iteration){echo $chunk;})){ - throw new \SYSTEM\LOG\ERROR("Could not transfere File.");} - return; - } - - public static function put($cat, $id, $contents) { - if (!array_key_exists($cat, self::$folders)) { - throw new \SYSTEM\LOG\ERROR("No matching Cat '" . $cat . "' found.");} - return move_uploaded_file($contents, self::$folders[$cat].$id); - } - - public static function delete($cat, $id) { - if (!array_key_exists($cat, self::$folders)) { - throw new \SYSTEM\LOG\ERROR("No matching Cat '" . $cat . "' found.");} - if(!file_exists(self::$folders[$cat].$id)){ - return false;} - return unlink(self::$folders[$cat].$id); - } - - public static function rename($cat, $id, $newid) { - if (!array_key_exists($cat, self::$folders)) { - throw new \SYSTEM\LOG\ERROR("No matching Cat '" . $cat . "' found.");} - if(!file_exists(self::$folders[$cat].$id)){ - return false;} - $ext = pathinfo(self::$folders[$cat].$id); - return rename(self::$folders[$cat].$id, self::$folders[$cat].$newid.'.'.$ext['extension']); - } - - private static function getFolder($folder) { - $files = array(); - foreach (glob($folder.'*') as $file) { - $files[] = basename($file);} - return $files; - } - - public static function getURL($cat, $id = null) { - return \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL) . 'api.php?call=files&cat=' . $cat . '&id=' . $id;} - - private static function file_get_contents_chunked($file,$chunk_size,$callback) - { - $handle = fopen($file, "r"); - $i = 0; - while (!feof($handle)) - { - call_user_func_array($callback,array(fread($handle,$chunk_size),&$handle,$i)); - $i++; - } - fclose($handle); - return true; - } -} \ No newline at end of file diff --git a/files/saistart_sys_sai/flag_deDE.png b/files/saistart_sys_sai/flag_deDE.png deleted file mode 100644 index ac4a977362738ca7daa20784717f10f9617136b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)h<6BFn%a z@b8~2SoNP@zd$;E{sbbRuHQd?{QCI=sNwhbA3*&Qe}GP900=;09NYi^fU@pUdVa9*13;+Sd!tjgXKhXQEMobL97(p6<{RLvMGBN!7 j!N9=G@a-1^K!5=NcXWu!7_DDe00000NkvXXu0mjfeQx^H diff --git a/files/saistart_sys_sai/flag_enUS.png b/files/saistart_sys_sai/flag_enUS.png deleted file mode 100644 index 10f451fe85c41c6c9a06d543a57114ae2f87ecc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP){qW|y?pud`Sa)3|NY&vWd%S0u>b>P!2!lUe;6EF*#G_c zFVXVt@6Q{uX@40W{p0iY2Aa+A^Cu7i8KT+YH}2j52q4BskM2rJ$^k9;2Xxc_|Np=M z&VaLlA*IO5FlECMfB<5VUNC{tBZO(|zW*;@GJN;|bTJ71`0*d;`d`2P!x=ymOA`2> z+y@9C##^^8%gd{MW@Y91_2d742B2~OQNf=-zkmD?Vqkdk_wPTUNeuu2#KPTG{_;O4 v7C%8E5*DLB7#Kb?Fnj}}-(W6879hX?8lYRg`Y`<~00000NkvXXu0mjfD6Jtx diff --git a/files/saistart_sys_sai/flag_esES.png b/files/saistart_sys_sai/flag_esES.png deleted file mode 100644 index c2de2d7111e3cb59cf6511dd2ab045e824bdb43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)@|4`Xj5kLT%`al?B=W5I`&pe;NKW0^Ri&h`xRJ_x;0v zUa?=y?0^3M|NZ~}FE9c#{{3cP{Qd6}13&;Vf!z&M{pZWqKYu4MFm$tgedF}w=P#IQ z7-9gT-$11R0mKA$(qEu4%ok$*y!^wMRm*x;`R7|k6yu?K{s8?55I{^|9{?Tjhec2I zv+6&FhFWG_BbNVc|Ns94tNRJp!0`V!Py;{!F#$2enB#XZaohg-5%Tlk#oa&nzQW9g zl0Y{D4gK?n0U&@Fe=;yIr=|V7caH%YEYL84k`Tt9-wc2LGODP&y?7BIfLMT@X8Qey zK~fSFpuiXa$^klgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Z9whYk?f=!Q|Ns8||JN@lTD;`{R1ZWk|EGa3dAO8ObDh3E3Cb;oH_5X#1 z|NHy@|M?558b}5Q|Cf`4hZv9q2p|@?lb|{i68>{>{ol0lx`{mi O0000@|4`Xj5kLT%yy% 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 rcW({88^Nc6j^K)5-C81cuk1o=e%8_-M>l tag specifically for CSS - * @param {string} path The path to the CSS file - * @param {object} context In what context you want to apply this to (document, iframe, etc) - * @param {string} id An id for you to reference later for changing properties of the - * @returns {undefined} - */ - function _insertCSSLink(path, context, id) { - id = id || ''; - var headID = context.getElementsByTagName("head")[0] - , cssNode = context.createElement('link'); - - _applyAttrs(cssNode, { - type: 'text/css' - , id: id - , rel: 'stylesheet' - , href: path - , name: path - , media: 'screen' - }); - - headID.appendChild(cssNode); - } - - // Simply replaces a class (o), to a new class (n) on an element provided (e) - function _replaceClass(e, o, n) { - e.className = e.className.replace(o, n); - } - - // Feature detects an iframe to get the inner document for writing to - function _getIframeInnards(el) { - return el.contentDocument || el.contentWindow.document; - } - - // Grabs the text from an element and preserves whitespace - function _getText(el) { - var theText; - // Make sure to check for type of string because if the body of the page - // doesn't have any text it'll be "" which is falsey and will go into - // the else which is meant for Firefox and shit will break - if (typeof document.body.innerText == 'string') { - theText = el.innerText; - } - else { - // First replace
s before replacing the rest of the HTML - theText = el.innerHTML.replace(/
/gi, "\n"); - // Now we can clean the HTML - theText = theText.replace(/<(?:.|\n)*?>/gm, ''); - // Now fix HTML entities - theText = theText.replace(/</gi, '<'); - theText = theText.replace(/>/gi, '>'); - } - return theText; - } - - function _setText(el, content) { - // Don't convert lt/gt characters as HTML when viewing the editor window - // TODO: Write a test to catch regressions for this - content = content.replace(//g, '>'); - content = content.replace(/\n/g, '
'); - - // Make sure to there aren't two spaces in a row (replace one with  ) - // If you find and replace every space with a   text will not wrap. - // Hence the name (Non-Breaking-SPace). - // TODO: Probably need to test this somehow... - content = content.replace(/
\s/g, '
 ') - content = content.replace(/\s\s\s/g, '   ') - content = content.replace(/\s\s/g, '  ') - content = content.replace(/^ /, ' ') - - el.innerHTML = content; - return true; - } - - /** - * Converts the 'raw' format of a file's contents into plaintext - * @param {string} content Contents of the file - * @returns {string} the sanitized content - */ - function _sanitizeRawContent(content) { - // Get this, 2 spaces in a content editable actually converts to: - // 0020 00a0, meaning, "space no-break space". So, manually convert - // no-break spaces to spaces again before handing to marked. - // Also, WebKit converts no-break to unicode equivalent and FF HTML. - return content.replace(/\u00a0/g, ' ').replace(/ /g, ' '); - } - - /** - * Will return the version number if the browser is IE. If not will return -1 - * TRY NEVER TO USE THIS AND USE FEATURE DETECTION IF POSSIBLE - * @returns {Number} -1 if false or the version number if true - */ - function _isIE() { - var rv = -1 // Return value assumes failure. - , ua = navigator.userAgent - , re; - if (navigator.appName == 'Microsoft Internet Explorer') { - re = /MSIE ([0-9]{1,}[\.0-9]{0,})/; - if (re.exec(ua) != null) { - rv = parseFloat(RegExp.$1, 10); - } - } - return rv; - } - - /** - * Same as the isIE(), but simply returns a boolean - * THIS IS TERRIBLE AND IS ONLY USED BECAUSE FULLSCREEN IN SAFARI IS BORKED - * If some other engine uses WebKit and has support for fullscreen they - * probably wont get native fullscreen until Safari's fullscreen is fixed - * @returns {Boolean} true if Safari - */ - function _isSafari() { - var n = window.navigator; - return n.userAgent.indexOf('Safari') > -1 && n.userAgent.indexOf('Chrome') == -1; - } - - /** - * Same as the isIE(), but simply returns a boolean - * THIS IS TERRIBLE ONLY USE IF ABSOLUTELY NEEDED - * @returns {Boolean} true if Safari - */ - function _isFirefox() { - var n = window.navigator; - return n.userAgent.indexOf('Firefox') > -1 && n.userAgent.indexOf('Seamonkey') == -1; - } - - /** - * Determines if supplied value is a function - * @param {object} object to determine type - */ - function _isFunction(functionToCheck) { - var getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; - } - - /** - * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 - * @param {boolean} [deepMerge=false] If true, will deep merge meaning it will merge sub-objects like {obj:obj2{foo:'bar'}} - * @param {object} first object - * @param {object} second object - * @returnss {object} a new object based on obj1 and obj2 - */ - function _mergeObjs() { - // copy reference to target object - var target = arguments[0] || {} - , i = 1 - , length = arguments.length - , deep = false - , options - , name - , src - , copy - - // Handle a deep copy situation - if (typeof target === "boolean") { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if (typeof target !== "object" && !_isFunction(target)) { - target = {}; - } - // extend jQuery itself if only one argument is passed - if (length === i) { - target = this; - --i; - } - - for (; i < length; i++) { - // Only deal with non-null/undefined values - if ((options = arguments[i]) != null) { - // Extend the base object - for (name in options) { - // @NOTE: added hasOwnProperty check - if (options.hasOwnProperty(name)) { - src = target[name]; - copy = options[name]; - // Prevent never-ending loop - if (target === copy) { - continue; - } - // Recurse if we're merging object values - if (deep && copy && typeof copy === "object" && !copy.nodeType) { - target[name] = _mergeObjs(deep, - // Never move original objects, clone them - src || (copy.length != null ? [] : {}) - , copy); - } else if (copy !== undefined) { // Don't bring in undefined values - target[name] = copy; - } - } - } - } - } - - // Return the modified object - return target; - } - - /** - * Initiates the EpicEditor object and sets up offline storage as well - * @class Represents an EpicEditor instance - * @param {object} options An optional customization object - * @returns {object} EpicEditor will be returned - */ - function EpicEditor(options) { - // Default settings will be overwritten/extended by options arg - var self = this - , opts = options || {} - , _defaultFileSchema - , _defaultFile - , defaults = { container: 'epiceditor' - , basePath: 'epiceditor' - , textarea: undefined - , clientSideStorage: true - , localStorageName: 'epiceditor' - , useNativeFullscreen: true - , file: { name: null - , defaultContent: '' - , autoSave: 100 // Set to false for no auto saving - } - , theme: { base: '/themes/base/epiceditor.css' - , preview: '/themes/preview/github.css' - , editor: '/themes/editor/epic-dark.css' - } - , focusOnLoad: false - , shortcut: { modifier: 18 // alt keycode - , fullscreen: 70 // f keycode - , preview: 80 // p keycode - } - , string: { togglePreview: 'Toggle Preview Mode' - , toggleEdit: 'Toggle Edit Mode' - , toggleFullscreen: 'Enter Fullscreen' - } - , parser: typeof marked == 'function' ? marked : null - , autogrow: false - , button: { fullscreen: true - , preview: true - , bar: "auto" - } - } - , defaultStorage - , autogrowDefaults = { minHeight: 80 - , maxHeight: false - , scroll: true - }; - - self.settings = _mergeObjs(true, defaults, opts); - - var buttons = self.settings.button; - self._fullscreenEnabled = typeof(buttons) === 'object' ? typeof buttons.fullscreen === 'undefined' || buttons.fullscreen : buttons === true; - self._editEnabled = typeof(buttons) === 'object' ? typeof buttons.edit === 'undefined' || buttons.edit : buttons === true; - self._previewEnabled = typeof(buttons) === 'object' ? typeof buttons.preview === 'undefined' || buttons.preview : buttons === true; - - if (!(typeof self.settings.parser == 'function' && typeof self.settings.parser('TEST') == 'string')) { - self.settings.parser = function (str) { - return str; - } - } - - if (self.settings.autogrow) { - if (self.settings.autogrow === true) { - self.settings.autogrow = autogrowDefaults; - } - else { - self.settings.autogrow = _mergeObjs(true, autogrowDefaults, self.settings.autogrow); - } - self._oldHeight = -1; - } - - // If you put an absolute link as the path of any of the themes ignore the basePath - // preview theme - if (!self.settings.theme.preview.match(/^https?:\/\//)) { - self.settings.theme.preview = self.settings.basePath + self.settings.theme.preview; - } - // editor theme - if (!self.settings.theme.editor.match(/^https?:\/\//)) { - self.settings.theme.editor = self.settings.basePath + self.settings.theme.editor; - } - // base theme - if (!self.settings.theme.base.match(/^https?:\/\//)) { - self.settings.theme.base = self.settings.basePath + self.settings.theme.base; - } - - // Grab the container element and save it to self.element - // if it's a string assume it's an ID and if it's an object - // assume it's a DOM element - if (typeof self.settings.container == 'string') { - self.element = document.getElementById(self.settings.container); - } - else if (typeof self.settings.container == 'object') { - self.element = self.settings.container; - } - - // Figure out the file name. If no file name is given we'll use the ID. - // If there's no ID either we'll use a namespaced file name that's incremented - // based on the calling order. As long as it doesn't change, drafts will be saved. - if (!self.settings.file.name) { - if (typeof self.settings.container == 'string') { - self.settings.file.name = self.settings.container; - } - else if (typeof self.settings.container == 'object') { - if (self.element.id) { - self.settings.file.name = self.element.id; - } - else { - if (!EpicEditor._data.unnamedEditors) { - EpicEditor._data.unnamedEditors = []; - } - EpicEditor._data.unnamedEditors.push(self); - self.settings.file.name = '__epiceditor-untitled-' + EpicEditor._data.unnamedEditors.length; - } - } - } - - if (self.settings.button.bar === "show") { - self.settings.button.bar = true; - } - - if (self.settings.button.bar === "hide") { - self.settings.button.bar = false; - } - - // Protect the id and overwrite if passed in as an option - // TODO: Put underscrore to denote that this is private - self._instanceId = 'epiceditor-' + Math.round(Math.random() * 100000); - self._storage = {}; - self._canSave = true; - - // Setup local storage of files - self._defaultFileSchema = function () { - return { - content: self.settings.file.defaultContent - , created: new Date() - , modified: new Date() - } - } - - if (localStorage && self.settings.clientSideStorage) { - this._storage = localStorage; - if (this._storage[self.settings.localStorageName] && self.getFiles(self.settings.file.name) === undefined) { - _defaultFile = self._defaultFileSchema(); - _defaultFile.content = self.settings.file.defaultContent; - } - } - - if (!this._storage[self.settings.localStorageName]) { - defaultStorage = {}; - defaultStorage[self.settings.file.name] = self._defaultFileSchema(); - defaultStorage = JSON.stringify(defaultStorage); - this._storage[self.settings.localStorageName] = defaultStorage; - } - - // A string to prepend files with to save draft versions of files - // and reset all preview drafts on each load! - self._previewDraftLocation = '__draft-'; - self._storage[self._previewDraftLocation + self.settings.localStorageName] = self._storage[self.settings.localStorageName]; - - // This needs to replace the use of classes to check the state of EE - self._eeState = { - fullscreen: false - , preview: false - , edit: false - , loaded: false - , unloaded: false - } - - // Now that it exists, allow binding of events if it doesn't exist yet - if (!self.events) { - self.events = {}; - } - - return this; - } - - /** - * Inserts the EpicEditor into the DOM via an iframe and gets it ready for editing and previewing - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.load = function (callback) { - - // Get out early if it's already loaded - if (this.is('loaded')) { return this; } - - // TODO: Gotta get the privates with underscores! - // TODO: Gotta document what these are for... - var self = this - , _HtmlTemplates - , iframeElement - , baseTag - , utilBtns - , utilBar - , utilBarTimer - , keypressTimer - , mousePos = { y: -1, x: -1 } - , _elementStates - , _isInEdit - , nativeFs = false - , nativeFsWebkit = false - , nativeFsMoz = false - , nativeFsW3C = false - , fsElement - , isMod = false - , isCtrl = false - , eventableIframes - , i // i is reused for loops - , boundAutogrow; - - // Startup is a way to check if this EpicEditor is starting up. Useful for - // checking and doing certain things before EpicEditor emits a load event. - self._eeState.startup = true; - - if (self.settings.useNativeFullscreen) { - nativeFsWebkit = document.body.webkitRequestFullScreen ? true : false; - nativeFsMoz = document.body.mozRequestFullScreen ? true : false; - nativeFsW3C = document.body.requestFullscreen ? true : false; - nativeFs = nativeFsWebkit || nativeFsMoz || nativeFsW3C; - } - - // Fucking Safari's native fullscreen works terribly - // REMOVE THIS IF SAFARI 7 WORKS BETTER - if (_isSafari()) { - nativeFs = false; - nativeFsWebkit = false; - } - - // It opens edit mode by default (for now); - if (!self.is('edit') && !self.is('preview')) { - self._eeState.edit = true; - } - - callback = callback || function () {}; - - // The editor HTML - // TODO: edit-mode class should be dynamically added - _HtmlTemplates = { - // This is wrapping iframe element. It contains the other two iframes and the utilbar - chrome: '
' + - '' + - '' + - '
' + - (self._previewEnabled ? ' ' : '') + - (self._editEnabled ? ' ' : '') + - (self._fullscreenEnabled ? '' : '') + - '
' + - '
' - - // The previewer is just an empty box for the generated HTML to go into - , previewer: '
' - , editor: '' - }; - - // Write an iframe and then select it for the editor - self.element.innerHTML = ''; - - // Because browsers add things like invisible padding and margins and stuff - // to iframes, we need to set manually set the height so that the height - // doesn't keep increasing (by 2px?) every time reflow() is called. - // FIXME: Figure out how to fix this without setting this - self.element.style.height = self.element.offsetHeight + 'px'; - - iframeElement = document.getElementById(self._instanceId); - - // Store a reference to the iframeElement itself - self.iframeElement = iframeElement; - - // Grab the innards of the iframe (returns the document.body) - // TODO: Change self.iframe to self.iframeDocument - self.iframe = _getIframeInnards(iframeElement); - self.iframe.open(); - self.iframe.write(_HtmlTemplates.chrome); - - // Now that we got the innards of the iframe, we can grab the other iframes - self.editorIframe = self.iframe.getElementById('epiceditor-editor-frame') - self.previewerIframe = self.iframe.getElementById('epiceditor-previewer-frame'); - - // Setup the editor iframe - self.editorIframeDocument = _getIframeInnards(self.editorIframe); - self.editorIframeDocument.open(); - // Need something for... you guessed it, Firefox - self.editorIframeDocument.write(_HtmlTemplates.editor); - self.editorIframeDocument.close(); - - // Setup the previewer iframe - self.previewerIframeDocument = _getIframeInnards(self.previewerIframe); - self.previewerIframeDocument.open(); - self.previewerIframeDocument.write(_HtmlTemplates.previewer); - - // Base tag is added so that links will open a new tab and not inside of the iframes - baseTag = self.previewerIframeDocument.createElement('base'); - baseTag.target = '_blank'; - self.previewerIframeDocument.getElementsByTagName('head')[0].appendChild(baseTag); - - self.previewerIframeDocument.close(); - - self.reflow(); - - // Insert Base Stylesheet - _insertCSSLink(self.settings.theme.base, self.iframe, 'theme'); - - // Insert Editor Stylesheet - _insertCSSLink(self.settings.theme.editor, self.editorIframeDocument, 'theme'); - - // Insert Previewer Stylesheet - _insertCSSLink(self.settings.theme.preview, self.previewerIframeDocument, 'theme'); - - // Add a relative style to the overall wrapper to keep CSS relative to the editor - self.iframe.getElementById('epiceditor-wrapper').style.position = 'relative'; - - // Set the position to relative so we hide them with left: -999999px - self.editorIframe.style.position = 'absolute'; - self.previewerIframe.style.position = 'absolute'; - - // Now grab the editor and previewer for later use - self.editor = self.editorIframeDocument.body; - self.previewer = self.previewerIframeDocument.getElementById('epiceditor-preview'); - - self.editor.contentEditable = true; - - // Firefox's gets all fucked up so, to be sure, we need to hardcode it - self.iframe.body.style.height = this.element.offsetHeight + 'px'; - - // Should actually check what mode it's in! - self.previewerIframe.style.left = '-999999px'; - - // Keep long lines from being longer than the editor - this.editorIframeDocument.body.style.wordWrap = 'break-word'; - - // FIXME figure out why it needs +2 px - if (_isIE() > -1) { - this.previewer.style.height = parseInt(_getStyle(this.previewer, 'height'), 10) + 2; - } - - // If there is a file to be opened with that filename and it has content... - this.open(self.settings.file.name); - - if (self.settings.focusOnLoad) { - // We need to wait until all three iframes are done loading by waiting until the parent - // iframe's ready state == complete, then we can focus on the contenteditable - self.iframe.addEventListener('readystatechange', function () { - if (self.iframe.readyState == 'complete') { - self.focus(); - } - }); - } - - // Because IE scrolls the whole window to hash links, we need our own - // method of scrolling the iframe to an ID from clicking a hash - self.previewerIframeDocument.addEventListener('click', function (e) { - var el = e.target - , body = self.previewerIframeDocument.body; - if (el.nodeName == 'A') { - // Make sure the link is a hash and the link is local to the iframe - if (el.hash && el.hostname == window.location.hostname) { - // Prevent the whole window from scrolling - e.preventDefault(); - // Prevent opening a new window - el.target = '_self'; - // Scroll to the matching element, if an element exists - if (body.querySelector(el.hash)) { - body.scrollTop = body.querySelector(el.hash).offsetTop; - } - } - } - }); - - utilBtns = self.iframe.getElementById('epiceditor-utilbar'); - - // TODO: Move into fullscreen setup function (_setupFullscreen) - _elementStates = {} - self._goFullscreen = function (el) { - this._fixScrollbars('auto'); - - if (self.is('fullscreen')) { - self._exitFullscreen(el); - return; - } - - if (nativeFs) { - if (nativeFsWebkit) { - el.webkitRequestFullScreen(); - } - else if (nativeFsMoz) { - el.mozRequestFullScreen(); - } - else if (nativeFsW3C) { - el.requestFullscreen(); - } - } - - _isInEdit = self.is('edit'); - - // Set the state of EE in fullscreen - // We set edit and preview to true also because they're visible - // we might want to allow fullscreen edit mode without preview (like a "zen" mode) - self._eeState.fullscreen = true; - self._eeState.edit = true; - self._eeState.preview = true; - - // Cache calculations - var windowInnerWidth = window.innerWidth - , windowInnerHeight = window.innerHeight - , windowOuterWidth = window.outerWidth - , windowOuterHeight = window.outerHeight; - - // Without this the scrollbars will get hidden when scrolled to the bottom in faux fullscreen (see #66) - if (!nativeFs) { - windowOuterHeight = window.innerHeight; - } - - // This MUST come first because the editor is 100% width so if we change the width of the iframe or wrapper - // the editor's width wont be the same as before - _elementStates.editorIframe = _saveStyleState(self.editorIframe, 'save', { - 'width': windowOuterWidth / 2 + 'px' - , 'height': windowOuterHeight + 'px' - , 'float': 'left' // Most browsers - , 'cssFloat': 'left' // FF - , 'styleFloat': 'left' // Older IEs - , 'display': 'block' - , 'position': 'static' - , 'left': '' - }); - - // the previewer - _elementStates.previewerIframe = _saveStyleState(self.previewerIframe, 'save', { - 'width': windowOuterWidth / 2 + 'px' - , 'height': windowOuterHeight + 'px' - , 'float': 'right' // Most browsers - , 'cssFloat': 'right' // FF - , 'styleFloat': 'right' // Older IEs - , 'display': 'block' - , 'position': 'static' - , 'left': '' - }); - - // Setup the containing element CSS for fullscreen - _elementStates.element = _saveStyleState(self.element, 'save', { - 'position': 'fixed' - , 'top': '0' - , 'left': '0' - , 'width': '100%' - , 'z-index': '9999' // Most browsers - , 'zIndex': '9999' // Firefox - , 'border': 'none' - , 'margin': '0' - // Should use the base styles background! - , 'background': _getStyle(self.editor, 'background-color') // Try to hide the site below - , 'height': windowInnerHeight + 'px' - }); - - // The iframe element - _elementStates.iframeElement = _saveStyleState(self.iframeElement, 'save', { - 'width': windowOuterWidth + 'px' - , 'height': windowInnerHeight + 'px' - }); - - // ...Oh, and hide the buttons and prevent scrolling - utilBtns.style.visibility = 'hidden'; - - if (!nativeFs) { - document.body.style.overflow = 'hidden'; - } - - self.preview(); - - self.focus(); - - self.emit('fullscreenenter'); - }; - - self._exitFullscreen = function (el) { - this._fixScrollbars(); - - _saveStyleState(self.element, 'apply', _elementStates.element); - _saveStyleState(self.iframeElement, 'apply', _elementStates.iframeElement); - _saveStyleState(self.editorIframe, 'apply', _elementStates.editorIframe); - _saveStyleState(self.previewerIframe, 'apply', _elementStates.previewerIframe); - - // We want to always revert back to the original styles in the CSS so, - // if it's a fluid width container it will expand on resize and not get - // stuck at a specific width after closing fullscreen. - self.element.style.width = self._eeState.reflowWidth ? self._eeState.reflowWidth : ''; - self.element.style.height = self._eeState.reflowHeight ? self._eeState.reflowHeight : ''; - - utilBtns.style.visibility = 'visible'; - - // Put the editor back in the right state - // TODO: This is ugly... how do we make this nicer? - // setting fullscreen to false here prevents the - // native fs callback from calling this function again - self._eeState.fullscreen = false; - - if (!nativeFs) { - document.body.style.overflow = 'auto'; - } - else { - if (nativeFsWebkit) { - document.webkitCancelFullScreen(); - } - else if (nativeFsMoz) { - document.mozCancelFullScreen(); - } - else if (nativeFsW3C) { - document.exitFullscreen(); - } - } - - if (_isInEdit) { - self.edit(); - } - else { - self.preview(); - } - - self.reflow(); - - self.emit('fullscreenexit'); - }; - - // This setups up live previews by triggering preview() IF in fullscreen on keyup - self.editor.addEventListener('keyup', function () { - if (keypressTimer) { - window.clearTimeout(keypressTimer); - } - keypressTimer = window.setTimeout(function () { - if (self.is('fullscreen')) { - self.preview(); - } - }, 250); - }); - - fsElement = self.iframeElement; - - // Sets up the onclick event on utility buttons - utilBtns.addEventListener('click', function (e) { - var targetClass = e.target.className; - if (targetClass.indexOf('epiceditor-toggle-preview-btn') > -1) { - self.preview(); - } - else if (targetClass.indexOf('epiceditor-toggle-edit-btn') > -1) { - self.edit(); - } - else if (targetClass.indexOf('epiceditor-fullscreen-btn') > -1) { - self._goFullscreen(fsElement); - } - }); - - // Sets up the NATIVE fullscreen editor/previewer for WebKit - if (nativeFsWebkit) { - document.addEventListener('webkitfullscreenchange', function () { - if (!document.webkitIsFullScreen && self._eeState.fullscreen) { - self._exitFullscreen(fsElement); - } - }, false); - } - else if (nativeFsMoz) { - document.addEventListener('mozfullscreenchange', function () { - if (!document.mozFullScreen && self._eeState.fullscreen) { - self._exitFullscreen(fsElement); - } - }, false); - } - else if (nativeFsW3C) { - document.addEventListener('fullscreenchange', function () { - if (document.fullscreenElement == null && self._eeState.fullscreen) { - self._exitFullscreen(fsElement); - } - }, false); - } - - // TODO: Move utilBar stuff into a utilBar setup function (_setupUtilBar) - utilBar = self.iframe.getElementById('epiceditor-utilbar'); - - // Hide it at first until they move their mouse - if (self.settings.button.bar !== true) { - utilBar.style.display = 'none'; - } - - utilBar.addEventListener('mouseover', function () { - if (utilBarTimer) { - clearTimeout(utilBarTimer); - } - }); - - function utilBarHandler(e) { - if (self.settings.button.bar !== "auto") { - return; - } - // Here we check if the mouse has moves more than 5px in any direction before triggering the mousemove code - // we do this for 2 reasons: - // 1. On Mac OS X lion when you scroll and it does the iOS like "jump" when it hits the top/bottom of the page itll fire off - // a mousemove of a few pixels depending on how hard you scroll - // 2. We give a slight buffer to the user in case he barely touches his touchpad or mouse and not trigger the UI - if (Math.abs(mousePos.y - e.pageY) >= 5 || Math.abs(mousePos.x - e.pageX) >= 5) { - utilBar.style.display = 'block'; - // if we have a timer already running, kill it out - if (utilBarTimer) { - clearTimeout(utilBarTimer); - } - - // begin a new timer that hides our object after 1000 ms - utilBarTimer = window.setTimeout(function () { - utilBar.style.display = 'none'; - }, 1000); - } - mousePos = { y: e.pageY, x: e.pageX }; - } - - // Add keyboard shortcuts for convenience. - function shortcutHandler(e) { - if (e.keyCode == self.settings.shortcut.modifier) { isMod = true } // check for modifier press(default is alt key), save to var - if (e.keyCode == 17) { isCtrl = true } // check for ctrl/cmnd press, in order to catch ctrl/cmnd + s - - // Check for alt+p and make sure were not in fullscreen - default shortcut to switch to preview - if (isMod === true && e.keyCode == self.settings.shortcut.preview && !self.is('fullscreen')) { - e.preventDefault(); - if (self.is('edit') && self._previewEnabled) { - self.preview(); - } - else if (self._editEnabled) { - self.edit(); - } - } - // Check for alt+f - default shortcut to make editor fullscreen - if (isMod === true && e.keyCode == self.settings.shortcut.fullscreen && self._fullscreenEnabled) { - e.preventDefault(); - self._goFullscreen(fsElement); - } - - // Set the modifier key to false once *any* key combo is completed - // or else, on Windows, hitting the alt key will lock the isMod state to true (ticket #133) - if (isMod === true && e.keyCode !== self.settings.shortcut.modifier) { - isMod = false; - } - - // When a user presses "esc", revert everything! - if (e.keyCode == 27 && self.is('fullscreen')) { - self._exitFullscreen(fsElement); - } - - // Check for ctrl + s (since a lot of people do it out of habit) and make it do nothing - if (isCtrl === true && e.keyCode == 83) { - self.save(); - e.preventDefault(); - isCtrl = false; - } - - // Do the same for Mac now (metaKey == cmd). - if (e.metaKey && e.keyCode == 83) { - self.save(); - e.preventDefault(); - } - - } - - function shortcutUpHandler(e) { - if (e.keyCode == self.settings.shortcut.modifier) { isMod = false } - if (e.keyCode == 17) { isCtrl = false } - } - - function pasteHandler(e) { - var content; - if (e.clipboardData) { - //FF 22, Webkit, "standards" - e.preventDefault(); - content = e.clipboardData.getData("text/plain"); - self.editorIframeDocument.execCommand("insertText", false, content); - } - else if (window.clipboardData) { - //IE, "nasty" - e.preventDefault(); - content = window.clipboardData.getData("Text"); - content = content.replace(//g, '>'); - content = content.replace(/\n/g, '
'); - content = content.replace(/\r/g, ''); //fuck you, ie! - content = content.replace(/
\s/g, '
 ') - content = content.replace(/\s\s\s/g, '   ') - content = content.replace(/\s\s/g, '  ') - self.editorIframeDocument.selection.createRange().pasteHTML(content); - } - } - - // Hide and show the util bar based on mouse movements - eventableIframes = [self.previewerIframeDocument, self.editorIframeDocument]; - - for (i = 0; i < eventableIframes.length; i++) { - eventableIframes[i].addEventListener('mousemove', function (e) { - utilBarHandler(e); - }); - eventableIframes[i].addEventListener('scroll', function (e) { - utilBarHandler(e); - }); - eventableIframes[i].addEventListener('keyup', function (e) { - shortcutUpHandler(e); - }); - eventableIframes[i].addEventListener('keydown', function (e) { - shortcutHandler(e); - }); - eventableIframes[i].addEventListener('paste', function (e) { - pasteHandler(e); - }); - } - - // Save the document every 100ms by default - // TODO: Move into autosave setup function (_setupAutoSave) - if (self.settings.file.autoSave) { - self._saveIntervalTimer = window.setInterval(function () { - if (!self._canSave) { - return; - } - self.save(false, true); - }, self.settings.file.autoSave); - } - - // Update a textarea automatically if a textarea is given so you don't need - // AJAX to submit a form and instead fall back to normal form behavior - if (self.settings.textarea) { - self._setupTextareaSync(); - } - - window.addEventListener('resize', function () { - // If NOT webkit, and in fullscreen, we need to account for browser resizing - // we don't care about webkit because you can't resize in webkit's fullscreen - if (self.is('fullscreen')) { - _applyStyles(self.iframeElement, { - 'width': window.outerWidth + 'px' - , 'height': window.innerHeight + 'px' - }); - - _applyStyles(self.element, { - 'height': window.innerHeight + 'px' - }); - - _applyStyles(self.previewerIframe, { - 'width': window.outerWidth / 2 + 'px' - , 'height': window.innerHeight + 'px' - }); - - _applyStyles(self.editorIframe, { - 'width': window.outerWidth / 2 + 'px' - , 'height': window.innerHeight + 'px' - }); - } - // Makes the editor support fluid width when not in fullscreen mode - else if (!self.is('fullscreen')) { - self.reflow(); - } - }); - - // Set states before flipping edit and preview modes - self._eeState.loaded = true; - self._eeState.unloaded = false; - - if (self.is('preview')) { - self.preview(); - } - else { - self.edit(); - } - - self.iframe.close(); - self._eeState.startup = false; - - if (self.settings.autogrow) { - self._fixScrollbars(); - - boundAutogrow = function () { - setTimeout(function () { - self._autogrow(); - }, 1); - }; - - //for if autosave is disabled or very slow - ['keydown', 'keyup', 'paste', 'cut'].forEach(function (ev) { - self.getElement('editor').addEventListener(ev, boundAutogrow); - }); - - self.on('__update', boundAutogrow); - self.on('edit', function () { - setTimeout(boundAutogrow, 50) - }); - self.on('preview', function () { - setTimeout(boundAutogrow, 50) - }); - - //for browsers that have rendering delays - setTimeout(boundAutogrow, 50); - boundAutogrow(); - } - - // The callback and call are the same thing, but different ways to access them - callback.call(this); - this.emit('load'); - return this; - } - - EpicEditor.prototype._setupTextareaSync = function () { - var self = this - , textareaFileName = self.settings.file.name - , _syncTextarea; - - // Even if autoSave is false, we want to make sure to keep the textarea synced - // with the editor's content. One bad thing about this tho is that we're - // creating two timers now in some configurations. We keep the textarea synced - // by saving and opening the textarea content from the draft file storage. - self._textareaSaveTimer = window.setInterval(function () { - if (!self._canSave) { - return; - } - self.save(true); - }, 100); - - _syncTextarea = function () { - // TODO: Figure out root cause for having to do this ||. - // This only happens for draft files. Probably has something to do with - // the fact draft files haven't been saved by the time this is called. - // TODO: Add test for this case. - self._textareaElement.value = self.exportFile(textareaFileName, 'text', true) || self.settings.file.defaultContent; - } - - if (typeof self.settings.textarea == 'string') { - self._textareaElement = document.getElementById(self.settings.textarea); - } - else if (typeof self.settings.textarea == 'object') { - self._textareaElement = self.settings.textarea; - } - - // On page load, if there's content in the textarea that means one of two - // different things: - // - // 1. The editor didn't load and the user was writing in the textarea and - // now he refreshed the page or the JS loaded and the textarea now has - // content. If this is the case the user probably expects his content is - // moved into the editor and not lose what he typed. - // - // 2. The developer put content in the textarea from some server side - // code. In this case, the textarea will take precedence. - // - // If the developer wants drafts to be recoverable they should check if - // the local file in localStorage's modified date is newer than the server. - if (self._textareaElement.value !== '') { - self.importFile(textareaFileName, self._textareaElement.value); - - // manually save draft after import so there is no delay between the - // import and exporting in _syncTextarea. Without this, _syncTextarea - // will pull the saved data from localStorage which will be <=100ms old. - self.save(true); - } - - // Update the textarea on load and pull from drafts - _syncTextarea(); - - // Make sure to keep it updated - self.on('__update', _syncTextarea); - } - - /** - * Will NOT focus the editor if the editor is still starting up AND - * focusOnLoad is set to false. This allows you to place this in code that - * gets fired during .load() without worrying about it overriding the user's - * option. For example use cases see preview() and edit(). - * @returns {undefined} - */ - - // Prevent focus when the user sets focusOnLoad to false by checking if the - // editor is starting up AND if focusOnLoad is true - EpicEditor.prototype._focusExceptOnLoad = function () { - var self = this; - if ((self._eeState.startup && self.settings.focusOnLoad) || !self._eeState.startup) { - self.focus(); - } - } - - /** - * Will remove the editor, but not offline files - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.unload = function (callback) { - - // Make sure the editor isn't already unloaded. - if (this.is('unloaded')) { - throw new Error('Editor isn\'t loaded'); - } - - var self = this - , editor = window.parent.document.getElementById(self._instanceId); - - editor.parentNode.removeChild(editor); - self._eeState.loaded = false; - self._eeState.unloaded = true; - callback = callback || function () {}; - - if (self.settings.textarea) { - self._textareaElement.value = ""; - self.removeListener('__update'); - } - - if (self._saveIntervalTimer) { - window.clearInterval(self._saveIntervalTimer); - } - if (self._textareaSaveTimer) { - window.clearInterval(self._textareaSaveTimer); - } - - callback.call(this); - self.emit('unload'); - return self; - } - - /** - * reflow allows you to dynamically re-fit the editor in the parent without - * having to unload and then reload the editor again. - * - * reflow will also emit a `reflow` event and will return the new dimensions. - * If it's called without params it'll return the new width and height and if - * it's called with just width or just height it'll just return the width or - * height. It's returned as an object like: { width: '100px', height: '1px' } - * - * @param {string|null} kind Can either be 'width' or 'height' or null - * if null, both the height and width will be resized - * @param {function} callback A function to fire after the reflow is finished. - * Will return the width / height in an obj as the first param of the callback. - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.reflow = function (kind, callback) { - var self = this - , widthDiff = _outerWidth(self.element) - self.element.offsetWidth - , heightDiff = _outerHeight(self.element) - self.element.offsetHeight - , elements = [self.iframeElement, self.editorIframe, self.previewerIframe] - , eventData = {} - , newWidth - , newHeight; - - if (typeof kind == 'function') { - callback = kind; - kind = null; - } - - if (!callback) { - callback = function () {}; - } - - for (var x = 0; x < elements.length; x++) { - if (!kind || kind == 'width') { - newWidth = self.element.offsetWidth - widthDiff + 'px'; - elements[x].style.width = newWidth; - self._eeState.reflowWidth = newWidth; - eventData.width = newWidth; - } - if (!kind || kind == 'height') { - newHeight = self.element.offsetHeight - heightDiff + 'px'; - elements[x].style.height = newHeight; - self._eeState.reflowHeight = newHeight - eventData.height = newHeight; - } - } - - self.emit('reflow', eventData); - callback.call(this, eventData); - return self; - } - - /** - * Will take the markdown and generate a preview view based on the theme - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.preview = function () { - var self = this - , x - , theme = self.settings.theme.preview - , anchors; - - _replaceClass(self.getElement('wrapper'), 'epiceditor-edit-mode', 'epiceditor-preview-mode'); - - // Check if no CSS theme link exists - if (!self.previewerIframeDocument.getElementById('theme')) { - _insertCSSLink(theme, self.previewerIframeDocument, 'theme'); - } - else if (self.previewerIframeDocument.getElementById('theme').name !== theme) { - self.previewerIframeDocument.getElementById('theme').href = theme; - } - - // Save a preview draft since it might not be saved to the real file yet - self.save(true); - - // Add the generated draft HTML into the previewer - self.previewer.innerHTML = self.exportFile(null, 'html', true); - - // Hide the editor and display the previewer - if (!self.is('fullscreen')) { - self.editorIframe.style.left = '-999999px'; - self.previewerIframe.style.left = ''; - self._eeState.preview = true; - self._eeState.edit = false; - self._focusExceptOnLoad(); - } - - self.emit('preview'); - return self; - } - - /** - * Helper to focus on the editor iframe. Will figure out which iframe to - * focus on based on which one is active and will handle the cross browser - * issues with focusing on the iframe vs the document body. - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.focus = function (pageload) { - var self = this - , isPreview = self.is('preview') - , focusElement = isPreview ? self.previewerIframeDocument.body - : self.editorIframeDocument.body; - - if (_isFirefox() && isPreview) { - focusElement = self.previewerIframe; - } - - focusElement.focus(); - return this; - } - - /** - * Puts the editor into fullscreen mode - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.enterFullscreen = function () { - if (this.is('fullscreen')) { return this; } - this._goFullscreen(this.iframeElement); - return this; - } - - /** - * Closes fullscreen mode if opened - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.exitFullscreen = function () { - if (!this.is('fullscreen')) { return this; } - this._exitFullscreen(this.iframeElement); - return this; - } - - /** - * Hides the preview and shows the editor again - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.edit = function () { - var self = this; - _replaceClass(self.getElement('wrapper'), 'epiceditor-preview-mode', 'epiceditor-edit-mode'); - self._eeState.preview = false; - self._eeState.edit = true; - self.editorIframe.style.left = ''; - self.previewerIframe.style.left = '-999999px'; - self._focusExceptOnLoad(); - self.emit('edit'); - return this; - } - - /** - * Grabs a specificed HTML node. Use it as a shortcut to getting the iframe contents - * @param {String} name The name of the node (can be document, body, editor, previewer, or wrapper) - * @returns {Object|Null} - */ - EpicEditor.prototype.getElement = function (name) { - var available = { - "container": this.element - , "wrapper": this.iframe.getElementById('epiceditor-wrapper') - , "wrapperIframe": this.iframeElement - , "editor": this.editorIframeDocument - , "editorIframe": this.editorIframe - , "previewer": this.previewerIframeDocument - , "previewerIframe": this.previewerIframe - } - - // Check that the given string is a possible option and verify the editor isn't unloaded - // without this, you'd be given a reference to an object that no longer exists in the DOM - if (!available[name] || this.is('unloaded')) { - return null; - } - else { - return available[name]; - } - } - - /** - * Returns a boolean of each "state" of the editor. For example "editor.is('loaded')" // returns true/false - * @param {String} what the state you want to check for - * @returns {Boolean} - */ - EpicEditor.prototype.is = function (what) { - var self = this; - switch (what) { - case 'loaded': - return self._eeState.loaded; - case 'unloaded': - return self._eeState.unloaded - case 'preview': - return self._eeState.preview - case 'edit': - return self._eeState.edit; - case 'fullscreen': - return self._eeState.fullscreen; - // TODO: This "works", but the tests are saying otherwise. Come back to this - // and figure out how to fix it. - // case 'focused': - // return document.activeElement == self.iframeElement; - default: - return false; - } - } - - /** - * Opens a file - * @param {string} name The name of the file you want to open - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.open = function (name) { - var self = this - , defaultContent = self.settings.file.defaultContent - , fileObj; - name = name || self.settings.file.name; - self.settings.file.name = name; - if (this._storage[self.settings.localStorageName]) { - fileObj = self.exportFile(name); - if (fileObj !== undefined) { - _setText(self.editor, fileObj); - self.emit('read'); - } - else { - _setText(self.editor, defaultContent); - self.save(); // ensure a save - self.emit('create'); - } - self.previewer.innerHTML = self.exportFile(null, 'html'); - self.emit('open'); - } - return this; - } - - /** - * Saves content for offline use - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.save = function (_isPreviewDraft, _isAuto) { - var self = this - , storage - , isUpdate = false - , file = self.settings.file.name - , previewDraftName = '' - , data = this._storage[previewDraftName + self.settings.localStorageName] - , content = _getText(this.editor); - - if (_isPreviewDraft) { - previewDraftName = self._previewDraftLocation; - } - - // This could have been false but since we're manually saving - // we know it's save to start autoSaving again - this._canSave = true; - - // Guard against storage being wiped out without EpicEditor knowing - // TODO: Emit saving error - storage seems to have been wiped - if (data) { - storage = JSON.parse(this._storage[previewDraftName + self.settings.localStorageName]); - - // If the file doesn't exist we need to create it - if (storage[file] === undefined) { - storage[file] = self._defaultFileSchema(); - } - - // If it does, we need to check if the content is different and - // if it is, send the update event and update the timestamp - else if (content !== storage[file].content) { - storage[file].modified = new Date(); - isUpdate = true; - } - //don't bother autosaving if the content hasn't actually changed - else if (_isAuto) { - return; - } - - storage[file].content = content; - this._storage[previewDraftName + self.settings.localStorageName] = JSON.stringify(storage); - - // After the content is actually changed, emit update so it emits the updated content - if (isUpdate) { - self.emit('update'); - // Emit a private update event so it can't get accidentally removed - self.emit('__update'); - } - - if (_isAuto) { - this.emit('autosave'); - } - else if (!_isPreviewDraft) { - this.emit('save'); - } - } - - return this; - } - - /** - * Removes a page - * @param {string} name The name of the file you want to remove from localStorage - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.remove = function (name) { - var self = this - , s; - name = name || self.settings.file.name; - - // If you're trying to delete a page you have open, block saving - if (name == self.settings.file.name) { - self._canSave = false; - } - - s = JSON.parse(this._storage[self.settings.localStorageName]); - delete s[name]; - this._storage[self.settings.localStorageName] = JSON.stringify(s); - this.emit('remove'); - return this; - }; - - /** - * Renames a file - * @param {string} oldName The old file name - * @param {string} newName The new file name - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.rename = function (oldName, newName) { - var self = this - , s = JSON.parse(this._storage[self.settings.localStorageName]); - s[newName] = s[oldName]; - delete s[oldName]; - this._storage[self.settings.localStorageName] = JSON.stringify(s); - self.open(newName); - return this; - }; - - /** - * Imports a file and it's contents and opens it - * @param {string} name The name of the file you want to import (will overwrite existing files!) - * @param {string} content Content of the file you want to import - * @param {string} kind The kind of file you want to import (TBI) - * @param {object} meta Meta data you want to save with your file. - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.importFile = function (name, content, kind, meta) { - var self = this - , isNew = false; - - name = name || self.settings.file.name; - content = content || ''; - kind = kind || 'md'; - meta = meta || {}; - - if (JSON.parse(this._storage[self.settings.localStorageName])[name] === undefined) { - isNew = true; - } - - // Set our current file to the new file and update the content - self.settings.file.name = name; - _setText(self.editor, content); - - if (isNew) { - self.emit('create'); - } - - self.save(); - - if (self.is('fullscreen')) { - self.preview(); - } - - //firefox has trouble with importing and working out the size right away - if (self.settings.autogrow) { - setTimeout(function () { - self._autogrow(); - }, 50); - } - - return this; - }; - - /** - * Gets the local filestore - * @param {string} name Name of the file in the store - * @returns {object|undefined} the local filestore, or a specific file in the store, if a name is given - */ - EpicEditor.prototype._getFileStore = function (name, _isPreviewDraft) { - var previewDraftName = '' - , store; - if (_isPreviewDraft) { - previewDraftName = this._previewDraftLocation; - } - store = JSON.parse(this._storage[previewDraftName + this.settings.localStorageName]); - if (name) { - return store[name]; - } - else { - return store; - } - } - - /** - * Exports a file as a string in a supported format - * @param {string} name Name of the file you want to export (case sensitive) - * @param {string} kind Kind of file you want the content in (currently supports html and text, default is the format the browser "wants") - * @returns {string|undefined} The content of the file in the content given or undefined if it doesn't exist - */ - EpicEditor.prototype.exportFile = function (name, kind, _isPreviewDraft) { - var self = this - , file - , content; - - name = name || self.settings.file.name; - kind = kind || 'text'; - - file = self._getFileStore(name, _isPreviewDraft); - - // If the file doesn't exist just return early with undefined - if (file === undefined) { - return; - } - - content = file.content; - - switch (kind) { - case 'html': - content = _sanitizeRawContent(content); - return self.settings.parser(content); - case 'text': - return _sanitizeRawContent(content); - case 'json': - file.content = _sanitizeRawContent(file.content); - return JSON.stringify(file); - case 'raw': - return content; - default: - return content; - } - } - - /** - * Gets the contents and metadata for files - * @param {string} name Name of the file whose data you want (case sensitive) - * @param {boolean} excludeContent whether the contents of files should be excluded - * @returns {object} An object with the names and data of every file, or just the data of one file if a name was given - */ - EpicEditor.prototype.getFiles = function (name, excludeContent) { - var file - , data = this._getFileStore(name); - - if (name) { - if (data !== undefined) { - if (excludeContent) { - delete data.content; - } - else { - data.content = _sanitizeRawContent(data.content); - } - } - return data; - } - else { - for (file in data) { - if (data.hasOwnProperty(file)) { - if (excludeContent) { - delete data[file].content; - } - else { - data[file].content = _sanitizeRawContent(data[file].content); - } - } - } - return data; - } - } - - // EVENTS - // TODO: Support for namespacing events like "preview.foo" - /** - * Sets up an event handler for a specified event - * @param {string} ev The event name - * @param {function} handler The callback to run when the event fires - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.on = function (ev, handler) { - var self = this; - if (!this.events[ev]) { - this.events[ev] = []; - } - this.events[ev].push(handler); - return self; - }; - - /** - * This will emit or "trigger" an event specified - * @param {string} ev The event name - * @param {any} data Any data you want to pass into the callback - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.emit = function (ev, data) { - var self = this - , x; - - data = data || self.getFiles(self.settings.file.name); - - if (!this.events[ev]) { - return; - } - - function invokeHandler(handler) { - handler.call(self, data); - } - - for (x = 0; x < self.events[ev].length; x++) { - invokeHandler(self.events[ev][x]); - } - - return self; - }; - - /** - * Will remove any listeners added from EpicEditor.on() - * @param {string} ev The event name - * @param {function} handler Handler to remove - * @returns {object} EpicEditor will be returned - */ - EpicEditor.prototype.removeListener = function (ev, handler) { - var self = this; - if (!handler) { - this.events[ev] = []; - return self; - } - if (!this.events[ev]) { - return self; - } - // Otherwise a handler and event exist, so take care of it - this.events[ev].splice(this.events[ev].indexOf(handler), 1); - return self; - } - - /** - * Handles autogrowing the editor - */ - EpicEditor.prototype._autogrow = function () { - var editorHeight - , newHeight - , minHeight - , maxHeight - , el - , style - , maxedOut = false; - - //autogrow in fullscreen is nonsensical - if (!this.is('fullscreen')) { - if (this.is('edit')) { - el = this.getElement('editor').documentElement; - } - else { - el = this.getElement('previewer').documentElement; - } - - editorHeight = _outerHeight(el); - newHeight = editorHeight; - - //handle minimum - minHeight = this.settings.autogrow.minHeight; - if (typeof minHeight === 'function') { - minHeight = minHeight(this); - } - - if (minHeight && newHeight < minHeight) { - newHeight = minHeight; - } - - //handle maximum - maxHeight = this.settings.autogrow.maxHeight; - if (typeof maxHeight === 'function') { - maxHeight = maxHeight(this); - } - - if (maxHeight && newHeight > maxHeight) { - newHeight = maxHeight; - maxedOut = true; - } - - if (maxedOut) { - this._fixScrollbars('auto'); - } else { - this._fixScrollbars('hidden'); - } - - //actual resize - if (newHeight != this.oldHeight) { - this.getElement('container').style.height = newHeight + 'px'; - this.reflow(); - if (this.settings.autogrow.scroll) { - window.scrollBy(0, newHeight - this.oldHeight); - } - this.oldHeight = newHeight; - } - } - } - - /** - * Shows or hides scrollbars based on the autogrow setting - * @param {string} forceSetting a value to force the overflow to - */ - EpicEditor.prototype._fixScrollbars = function (forceSetting) { - var setting; - if (this.settings.autogrow) { - setting = 'hidden'; - } - else { - setting = 'auto'; - } - setting = forceSetting || setting; - this.getElement('editor').documentElement.style.overflow = setting; - this.getElement('previewer').documentElement.style.overflow = setting; - } - - EpicEditor.version = '0.2.2'; - - // Used to store information to be shared across editors - EpicEditor._data = {}; - - window.EpicEditor = EpicEditor; -})(window); - -/** - * marked - a markdown parser - * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked - */ - -;(function() { - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - nptable: noop, - lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, - list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, - def: /^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - table: noop, - paragraph: /^([^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+\n*/, - text: /^[^\n]+/ -}; - -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = replace(block.item, 'gm') - (/bull/g, block.bullet) - (); - -block.list = replace(block.list) - (/bull/g, block.bullet) - ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/) - (); - -block._tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b'; - -block.html = replace(block.html) - ('comment', //) - ('closed', /<(tag)[\s\S]+?<\/\1>/) - ('closing', /])*?>/) - (/tag/g, block._tag) - (); - -block.paragraph = replace(block.paragraph) - ('hr', block.hr) - ('heading', block.heading) - ('lheading', block.lheading) - ('blockquote', block.blockquote) - ('tag', '<' + block._tag) - ('def', block.def) - (); - -/** - * Normal Block Grammar - */ - -block.normal = merge({}, block); - -/** - * GFM Block Grammar - */ - -block.gfm = merge({}, block.normal, { - fences: /^ *(`{3,}|~{3,}) *(\w+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, - paragraph: /^/ -}); - -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' + block.gfm.fences.source.replace('\\1', '\\2') + '|') - (); - -/** - * GFM + Tables Block Grammar - */ - -block.tables = merge({}, block.gfm, { - nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, - table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ -}); - -/** - * Block Lexer - */ - -function Lexer(options) { - this.tokens = []; - this.tokens.links = {}; - this.options = options || marked.defaults; - this.rules = block.normal; - - if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } - } -} - -/** - * Expose Block Rules - */ - -Lexer.rules = block; - -/** - * Static Lex Method - */ - -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); -}; - -/** - * Preprocessing - */ - -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); - - return this.token(src, true); -}; - -/** - * Lexing - */ - -Lexer.prototype.token = function(src, top) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , item - , space - , i - , l; - - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); - } - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2], - text: cap[3] - }); - continue; - } - - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } - - // table no leading pipe (gfm) - if (top && (cap = this.rules.nptable.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i].split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } - - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; - } - - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); - - this.tokens.push({ - type: 'blockquote_start' - }); - - cap = cap[0].replace(/^ *> ?/gm, ''); - - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top); - - this.tokens.push({ - type: 'blockquote_end' - }); - - continue; - } - - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - - this.tokens.push({ - type: 'list_start', - ordered: isFinite(cap[2]) - }); - - // Get each top-level item. - cap = cap[0].match(this.rules.item); - - next = false; - l = cap.length; - i = 0; - - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item[item.length-1] === '\n'; - if (!loose) loose = next; - } - - this.tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - this.token(item, false); - - this.tokens.push({ - type: 'list_item_end' - }); - } - - this.tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: cap[1] === 'pre', - text: cap[0] - }); - continue; - } - - // def - if (top && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; - } - - // table (gfm) - if (top && (cap = this.rules.table.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i] - .replace(/^ *\| *| *\| *$/g, '') - .split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[0] - }); - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return this.tokens; -}; - -/** - * Inline-Level Grammar - */ - -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>|])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, - em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, - code: /^(`+)([\s\S]*?[^`])\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - del: noop, - text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._inside) - ('href', inline._href) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._inside) - (); - -/** - * Normal Inline Grammar - */ - -inline.normal = merge({}, inline); - -/** - * Pedantic Inline Grammar - */ - -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ -}); - -/** - * GFM Inline Grammar - */ - -inline.gfm = merge({}, inline.normal, { - escape: replace(inline.escape)('])', '~])')(), - url: /^(https?:\/\/[^\s]+[^.,:;"')\]\s])/, - del: /^~{2,}([\s\S]+?)~{2,}/, - text: replace(inline.text) - (']|', '~]|') - ('|', '|https?://|') - () -}); - -/** - * GFM + Line Breaks Inline Grammar - */ - -inline.breaks = merge({}, inline.gfm, { - br: replace(inline.br)('{2,}', '*')(), - text: replace(inline.gfm.text)('{2,}', '*')() -}); - -/** - * Inline Lexer & Compiler - */ - -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - - if (!this.links) { - throw new - Error('Tokens array requires a `links` property.'); - } - - if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } else if (this.options.pedantic) { - this.rules = inline.pedantic; - } -} - -/** - * Expose Inline Rules - */ - -InlineLexer.rules = inline; - -/** - * Static Lexing/Compiling Method - */ - -InlineLexer.output = function(src, links, opt) { - var inline = new InlineLexer(links, opt); - return inline.output(src); -}; - -/** - * Lexing/Compiling - */ - -InlineLexer.prototype.output = function(src) { - var out = '' - , link - , text - , href - , cap; - - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out += cap[1]; - continue; - } - - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = cap[1][6] === ':' - ? this.mangle(cap[1].substring(7)) - : this.mangle(cap[1]); - href = this.mangle('mailto:') + text; - } else { - text = escape(cap[1]); - href = text; - } - out += '' - + text - + ''; - continue; - } - - // url (gfm) - if (cap = this.rules.url.exec(src)) { - src = src.substring(cap[0].length); - text = escape(cap[1]); - href = text; - out += '' - + text - + ''; - continue; - } - - // tag - if (cap = this.rules.tag.exec(src)) { - src = src.substring(cap[0].length); - out += this.options.sanitize - ? escape(cap[0]) - : cap[0]; - continue; - } - - // link - if (cap = this.rules.link.exec(src)) { - src = src.substring(cap[0].length); - out += this.outputLink(cap, { - href: cap[2], - title: cap[3] - }); - continue; - } - - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0][0]; - src = cap[0].substring(1) + src; - continue; - } - out += this.outputLink(cap, link); - continue; - } - - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[2] || cap[1]) - + ''; - continue; - } - - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[2] || cap[1]) - + ''; - continue; - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + escape(cap[2], true) - + ''; - continue; - } - - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += '
'; - continue; - } - - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[1]) - + ''; - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - out += escape(cap[0]); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return out; -}; - -/** - * Compile Link - */ - -InlineLexer.prototype.outputLink = function(cap, link) { - if (cap[0][0] !== '!') { - return '' - + this.output(cap[1]) - + ''; - } else { - return ''
-      + escape(cap[1])
-      + ''; - } -}; - -/** - * Mangle Links - */ - -InlineLexer.prototype.mangle = function(text) { - var out = '' - , l = text.length - , i = 0 - , ch; - - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } - - return out; -}; - -/** - * Parsing & Compiling - */ - -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; -} - -/** - * Static Parse Method - */ - -Parser.parse = function(src, options) { - var parser = new Parser(options); - return parser.parse(src); -}; - -/** - * Parse Loop - */ - -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options); - this.tokens = src.reverse(); - - var out = ''; - while (this.next()) { - out += this.tok(); - } - - return out; -}; - -/** - * Next Token - */ - -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; - -/** - * Preview Next Token - */ - -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length-1] || 0; -}; - -/** - * Parse Text Tokens - */ - -Parser.prototype.parseText = function() { - var body = this.token.text; - - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } - - return this.inline.output(body); -}; - -/** - * Parse Current Token - */ - -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return ''; - } - case 'hr': { - return '
\n'; - } - case 'heading': { - return '' - + this.inline.output(this.token.text) - + '\n'; - } - case 'code': { - if (this.options.highlight) { - var code = this.options.highlight(this.token.text, this.token.lang); - if (code != null && code !== this.token.text) { - this.token.escaped = true; - this.token.text = code; - } - } - - if (!this.token.escaped) { - this.token.text = escape(this.token.text, true); - } - - return '
'
-        + this.token.text
-        + '
\n'; - } - case 'table': { - var body = '' - , heading - , i - , row - , cell - , j; - - // header - body += '\n\n'; - for (i = 0; i < this.token.header.length; i++) { - heading = this.inline.output(this.token.header[i]); - body += this.token.align[i] - ? '' + heading + '\n' - : '' + heading + '\n'; - } - body += '\n\n'; - - // body - body += '\n' - for (i = 0; i < this.token.cells.length; i++) { - row = this.token.cells[i]; - body += '\n'; - for (j = 0; j < row.length; j++) { - cell = this.inline.output(row[j]); - body += this.token.align[j] - ? '' + cell + '\n' - : '' + cell + '\n'; - } - body += '\n'; - } - body += '\n'; - - return '\n' - + body - + '
\n'; - } - case 'blockquote_start': { - var body = ''; - - while (this.next().type !== 'blockquote_end') { - body += this.tok(); - } - - return '
\n' - + body - + '
\n'; - } - case 'list_start': { - var type = this.token.ordered ? 'ol' : 'ul' - , body = ''; - - while (this.next().type !== 'list_end') { - body += this.tok(); - } - - return '<' - + type - + '>\n' - + body - + '\n'; - } - case 'list_item_start': { - var body = ''; - - while (this.next().type !== 'list_item_end') { - body += this.token.type === 'text' - ? this.parseText() - : this.tok(); - } - - return '
  • ' - + body - + '
  • \n'; - } - case 'loose_item_start': { - var body = ''; - - while (this.next().type !== 'list_item_end') { - body += this.tok(); - } - - return '
  • ' - + body - + '
  • \n'; - } - case 'html': { - return !this.token.pre && !this.options.pedantic - ? this.inline.output(this.token.text) - : this.token.text; - } - case 'paragraph': { - return '

    ' - + this.inline.output(this.token.text) - + '

    \n'; - } - case 'text': { - return '

    ' - + this.parseText() - + '

    \n'; - } - } -}; - -/** - * Helpers - */ - -function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -} - -function replace(regex, opt) { - regex = regex.source; - opt = opt || ''; - return function self(name, val) { - if (!name) return new RegExp(regex, opt); - val = val.source || val; - val = val.replace(/(^|[^\[])\^/g, '$1'); - regex = regex.replace(name, val); - return self; - }; -} - -function noop() {} -noop.exec = noop; - -function merge(obj) { - var i = 1 - , target - , key; - - for (; i < arguments.length; i++) { - target = arguments[i]; - for (key in target) { - if (Object.prototype.hasOwnProperty.call(target, key)) { - obj[key] = target[key]; - } - } - } - - return obj; -} - -/** - * Marked - */ - -function marked(src, opt) { - try { - return Parser.parse(Lexer.lex(src, opt), opt); - } catch (e) { - e.message += '\nPlease report this to https://github.com/chjj/marked.'; - if ((opt || marked.defaults).silent) { - return 'An error occured:\n' + e.message; - } - throw e; - } -} - -/** - * Options - */ - -marked.options = -marked.setOptions = function(opt) { - marked.defaults = opt; - return marked; -}; - -marked.defaults = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - silent: false, - highlight: null -}; - -/** - * Expose - */ - -marked.Parser = Parser; -marked.parser = Parser.parse; - -marked.Lexer = Lexer; -marked.lexer = Lexer.lex; - -marked.InlineLexer = InlineLexer; -marked.inlineLexer = InlineLexer.output; - -marked.parse = marked; - -if (typeof module !== 'undefined') { - module.exports = marked; -} else if (typeof define === 'function' && define.amd) { - define(function() { return marked; }); -} else { - this.marked = marked; -} - -}).call(function() { - return this || (typeof window !== 'undefined' ? window : global); -}()); diff --git a/lib/EpicEditor/js/epiceditor.min.js b/lib/EpicEditor/js/epiceditor.min.js deleted file mode 100644 index e664025..0000000 --- a/lib/EpicEditor/js/epiceditor.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * EpicEditor - An Embeddable JavaScript Markdown Editor (https://github.com/OscarGodson/EpicEditor) - * Copyright (c) 2011-2012, Oscar Godson. (MIT Licensed) - */(function(e,t){function n(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}function r(e,t){for(var n in t)t.hasOwnProperty(n)&&(e.style[n]=t[n])}function i(t,n){var r=t,i=null;return e.getComputedStyle?i=document.defaultView.getComputedStyle(r,null).getPropertyValue(n):r.currentStyle&&(i=r.currentStyle[n]),i}function s(e,t,n){var s={},o;if(t==="save"){for(o in n)n.hasOwnProperty(o)&&(s[o]=i(e,o));r(e,n)}else t==="apply"&&r(e,n);return s}function o(e){var t=parseInt(i(e,"border-left-width"),10)+parseInt(i(e,"border-right-width"),10),n=parseInt(i(e,"padding-left"),10)+parseInt(i(e,"padding-right"),10),r=e.offsetWidth,s;return isNaN(t)&&(t=0),s=t+n+r,s}function u(e){var t=parseInt(i(e,"border-top-width"),10)+parseInt(i(e,"border-bottom-width"),10),n=parseInt(i(e,"padding-top"),10)+parseInt(i(e,"padding-bottom"),10),r=parseInt(i(e,"height"),10),s;return isNaN(t)&&(t=0),s=t+n+r,s}function a(e,t,r){r=r||"";var i=t.getElementsByTagName("head")[0],s=t.createElement("link");n(s,{type:"text/css",id:r,rel:"stylesheet",href:e,name:e,media:"screen"}),i.appendChild(s)}function f(e,t,n){e.className=e.className.replace(t,n)}function l(e){return e.contentDocument||e.contentWindow.document}function c(e){var t;return typeof document.body.innerText=="string"?t=e.innerText:(t=e.innerHTML.replace(/
    /gi,"\n"),t=t.replace(/<(?:.|\n)*?>/gm,""),t=t.replace(/</gi,"<"),t=t.replace(/>/gi,">")),t}function h(e,t){return t=t.replace(//g,">"),t=t.replace(/\n/g,"
    "),t=t.replace(/
    \s/g,"
     "),t=t.replace(/\s\s\s/g,"   "),t=t.replace(/\s\s/g,"  "),t=t.replace(/^ /," "),e.innerHTML=t,!0}function p(e){return e.replace(/\u00a0/g," ").replace(/ /g," ")}function d(){var e=-1,t=navigator.userAgent,n;return navigator.appName=="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]{1,}[\.0-9]{0,})/,n.exec(t)!=null&&(e=parseFloat(RegExp.$1,10))),e}function v(){var t=e.navigator;return t.userAgent.indexOf("Safari")>-1&&t.userAgent.indexOf("Chrome")==-1}function m(){var t=e.navigator;return t.userAgent.indexOf("Firefox")>-1&&t.userAgent.indexOf("Seamonkey")==-1}function g(e){var t={};return e&&t.toString.call(e)==="[object Function]"}function y(){var e=arguments[0]||{},n=1,r=arguments.length,i=!1,s,o,u,a;typeof e=="boolean"&&(i=e,e=arguments[1]||{},n=2),typeof e!="object"&&!g(e)&&(e={}),r===n&&(e=this,--n);for(;n=5||Math.abs(g.x-t.pageX)>=5)h.style.display="block",p&&clearTimeout(p),p=e.setTimeout(function(){h.style.display="none"},1e3);g={y:t.pageY,x:t.pageX}}function M(e){e.keyCode==n.settings.shortcut.modifier&&(N=!0),e.keyCode==17&&(C=!0),N===!0&&e.keyCode==n.settings.shortcut.preview&&!n.is("fullscreen")&&(e.preventDefault(),n.is("edit")&&n._previewEnabled?n.preview():n._editEnabled&&n.edit()),N===!0&&e.keyCode==n.settings.shortcut.fullscreen&&n._fullscreenEnabled&&(e.preventDefault(),n._goFullscreen(T)),N===!0&&e.keyCode!==n.settings.shortcut.modifier&&(N=!1),e.keyCode==27&&n.is("fullscreen")&&n._exitFullscreen(T),C===!0&&e.keyCode==83&&(n.save(),e.preventDefault(),C=!1),e.metaKey&&e.keyCode==83&&(n.save(),e.preventDefault())}function _(e){e.keyCode==n.settings.shortcut.modifier&&(N=!1),e.keyCode==17&&(C=!1)}function D(t){var r;t.clipboardData?(t.preventDefault(),r=t.clipboardData.getData("text/plain"),n.editorIframeDocument.execCommand("insertText",!1,r)):e.clipboardData&&(t.preventDefault(),r=e.clipboardData.getData("Text"),r=r.replace(//g,">"),r=r.replace(/\n/g,"
    "),r=r.replace(/\r/g,""),r=r.replace(/
    \s/g,"
     "),r=r.replace(/\s\s\s/g,"   "),r=r.replace(/\s\s/g,"  "),n.editorIframeDocument.selection.createRange().pasteHTML(r))}if(this.is("loaded"))return this;var n=this,o,u,f,c,h,p,m,g={y:-1,x:-1},y,b,w=!1,E=!1,S=!1,x=!1,T,N=!1,C=!1,k,L,A;n._eeState.startup=!0,n.settings.useNativeFullscreen&&(E=document.body.webkitRequestFullScreen?!0:!1,S=document.body.mozRequestFullScreen?!0:!1,x=document.body.requestFullscreen?!0:!1,w=E||S||x),v()&&(w=!1,E=!1),!n.is("edit")&&!n.is("preview")&&(n._eeState.edit=!0),t=t||function(){},o={chrome:'
    '+(n._previewEnabled?' ':"")+(n._editEnabled?' ':"")+(n._fullscreenEnabled?'':"")+"
    "+"
    ",previewer:'
    ',editor:""},n.element.innerHTML='',n.element.style.height=n.element.offsetHeight+"px",u=document.getElementById(n._instanceId),n.iframeElement=u,n.iframe=l(u),n.iframe.open(),n.iframe.write(o.chrome),n.editorIframe=n.iframe.getElementById("epiceditor-editor-frame"),n.previewerIframe=n.iframe.getElementById("epiceditor-previewer-frame"),n.editorIframeDocument=l(n.editorIframe),n.editorIframeDocument.open(),n.editorIframeDocument.write(o.editor),n.editorIframeDocument.close(),n.previewerIframeDocument=l(n.previewerIframe),n.previewerIframeDocument.open(),n.previewerIframeDocument.write(o.previewer),f=n.previewerIframeDocument.createElement("base"),f.target="_blank",n.previewerIframeDocument.getElementsByTagName("head")[0].appendChild(f),n.previewerIframeDocument.close(),n.reflow(),a(n.settings.theme.base,n.iframe,"theme"),a(n.settings.theme.editor,n.editorIframeDocument,"theme"),a(n.settings.theme.preview,n.previewerIframeDocument,"theme"),n.iframe.getElementById("epiceditor-wrapper").style.position="relative",n.editorIframe.style.position="absolute",n.previewerIframe.style.position="absolute",n.editor=n.editorIframeDocument.body,n.previewer=n.previewerIframeDocument.getElementById("epiceditor-preview"),n.editor.contentEditable=!0,n.iframe.body.style.height=this.element.offsetHeight+"px",n.previewerIframe.style.left="-999999px",this.editorIframeDocument.body.style.wordWrap="break-word",d()>-1&&(this.previewer.style.height=parseInt(i(this.previewer,"height"),10)+2),this.open(n.settings.file.name),n.settings.focusOnLoad&&n.iframe.addEventListener("readystatechange",function(){n.iframe.readyState=="complete"&&n.focus()}),n.previewerIframeDocument.addEventListener("click",function(t){var r=t.target,i=n.previewerIframeDocument.body;r.nodeName=="A"&&r.hash&&r.hostname==e.location.hostname&&(t.preventDefault(),r.target="_self",i.querySelector(r.hash)&&(i.scrollTop=i.querySelector(r.hash).offsetTop))}),c=n.iframe.getElementById("epiceditor-utilbar"),y={},n._goFullscreen=function(t){this._fixScrollbars("auto");if(n.is("fullscreen")){n._exitFullscreen(t);return}w&&(E?t.webkitRequestFullScreen():S?t.mozRequestFullScreen():x&&t.requestFullscreen()),b=n.is("edit"),n._eeState.fullscreen=!0,n._eeState.edit=!0,n._eeState.preview=!0;var r=e.innerWidth,o=e.innerHeight,u=e.outerWidth,a=e.outerHeight;w||(a=e.innerHeight),y.editorIframe=s(n.editorIframe,"save",{width:u/2+"px",height:a+"px","float":"left",cssFloat:"left",styleFloat:"left",display:"block",position:"static",left:""}),y.previewerIframe=s(n.previewerIframe,"save",{width:u/2+"px",height:a+"px","float":"right",cssFloat:"right",styleFloat:"right",display:"block",position:"static",left:""}),y.element=s(n.element,"save",{position:"fixed",top:"0",left:"0",width:"100%","z-index":"9999",zIndex:"9999",border:"none",margin:"0",background:i(n.editor,"background-color"),height:o+"px"}),y.iframeElement=s(n.iframeElement,"save",{width:u+"px",height:o+"px"}),c.style.visibility="hidden",w||(document.body.style.overflow="hidden"),n.preview(),n.focus(),n.emit("fullscreenenter")},n._exitFullscreen=function(e){this._fixScrollbars(),s(n.element,"apply",y.element),s(n.iframeElement,"apply",y.iframeElement),s(n.editorIframe,"apply",y.editorIframe),s(n.previewerIframe,"apply",y.previewerIframe),n.element.style.width=n._eeState.reflowWidth?n._eeState.reflowWidth:"",n.element.style.height=n._eeState.reflowHeight?n._eeState.reflowHeight:"",c.style.visibility="visible",n._eeState.fullscreen=!1,w?E?document.webkitCancelFullScreen():S?document.mozCancelFullScreen():x&&document.exitFullscreen():document.body.style.overflow="auto",b?n.edit():n.preview(),n.reflow(),n.emit("fullscreenexit")},n.editor.addEventListener("keyup",function(){m&&e.clearTimeout(m),m=e.setTimeout(function(){n.is("fullscreen")&&n.preview()},250)}),T=n.iframeElement,c.addEventListener("click",function(e){var t=e.target.className;t.indexOf("epiceditor-toggle-preview-btn")>-1?n.preview():t.indexOf("epiceditor-toggle-edit-btn")>-1?n.edit():t.indexOf("epiceditor-fullscreen-btn")>-1&&n._goFullscreen(T)}),E?document.addEventListener("webkitfullscreenchange",function(){!document.webkitIsFullScreen&&n._eeState.fullscreen&&n._exitFullscreen(T)},!1):S?document.addEventListener("mozfullscreenchange",function(){!document.mozFullScreen&&n._eeState.fullscreen&&n._exitFullscreen(T)},!1):x&&document.addEventListener("fullscreenchange",function(){document.fullscreenElement==null&&n._eeState.fullscreen&&n._exitFullscreen(T)},!1),h=n.iframe.getElementById("epiceditor-utilbar"),n.settings.button.bar!==!0&&(h.style.display="none"),h.addEventListener("mouseover",function(){p&&clearTimeout(p)}),k=[n.previewerIframeDocument,n.editorIframeDocument];for(L=0;Li&&(n=i,a=!0),a?this._fixScrollbars("auto"):this._fixScrollbars("hidden"),n!=this.oldHeight&&(this.getElement("container").style.height=n+"px",this.reflow(),this.settings.autogrow.scroll&&e.scrollBy(0,n-this.oldHeight),this.oldHeight=n))},b.prototype._fixScrollbars=function(e){var t;this.settings.autogrow?t="hidden":t="auto",t=e||t,this.getElement("editor").documentElement.style.overflow=t,this.getElement("previewer").documentElement.style.overflow=t},b.version="0.2.2",b._data={},e.EpicEditor=b})(window),function(){function t(t){this.tokens=[],this.tokens.links={},this.options=t||f.defaults,this.rules=e.normal,this.options.gfm&&(this.options.tables?this.rules=e.tables:this.rules=e.gfm)}function r(e,t){this.options=t||f.defaults,this.links=e,this.rules=n.normal;if(!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=n.breaks:this.rules=n.gfm:this.options.pedantic&&(this.rules=n.pedantic)}function i(e){this.tokens=[],this.token=null,this.options=e||f.defaults}function s(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function o(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=i.source||i,i=i.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,i),n):new RegExp(e,t)}}function u(){}function a(e){var t=1,n,r;for(;t[^\n]+(\n[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:u,paragraph:/^([^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+\n*/,text:/^[^\n]+/};e.bullet=/(?:[*+-]|\d+\.)/,e.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,e.item=o(e.item,"gm")(/bull/g,e.bullet)(),e.list=o(e.list)(/bull/g,e.bullet)("hr",/\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)(),e._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b",e.html=o(e.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,e._tag)(),e.paragraph=o(e.paragraph)("hr",e.hr)("heading",e.heading)("lheading",e.lheading)("blockquote",e.blockquote)("tag","<"+e._tag)("def",e.def)(),e.normal=a({},e),e.gfm=a({},e.normal,{fences:/^ *(`{3,}|~{3,}) *(\w+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/}),e.gfm.paragraph=o(e.paragraph)("(?!","(?!"+e.gfm.fences.source.replace("\\1","\\2")+"|")(),e.tables=a({},e.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),t.rules=e,t.lex=function(e,n){var r=new t(n);return r.lex(e)},t.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},t.prototype.token=function(e,t){var e=e.replace(/^ +$/gm,""),n,r,i,s,o,u,a;while(e){if(i=this.rules.newline.exec(e))e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"});if(i=this.rules.code.exec(e)){e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:i.replace(/\n+$/,"")});continue}if(i=this.rules.fences.exec(e)){e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2],text:i[3]});continue}if(i=this.rules.heading.exec(e)){e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});continue}if(t&&(i=this.rules.nptable.exec(e))){e=e.substring(i[0].length),s={type:"table",header:i[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3].replace(/\n$/,"").split("\n")};for(u=0;u ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});continue}if(i=this.rules.list.exec(e)){e=e.substring(i[0].length),this.tokens.push({type:"list_start",ordered:isFinite(i[2])}),i=i[0].match(this.rules.item),n=!1,a=i.length,u=0;for(;u|])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:u,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)([\s\S]*?[^`])\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:u,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,n.link=o(n.link)("inside",n._inside)("href",n._href)(),n.reflink=o(n.reflink)("inside",n._inside)(),n.normal=a({},n),n.pedantic=a({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),n.gfm=a({},n.normal,{escape:o(n.escape)("])","~])")(),url:/^(https?:\/\/[^\s]+[^.,:;"')\]\s])/,del:/^~{2,}([\s\S]+?)~{2,}/,text:o(n.text)("]|","~]|")("|","|https?://|")()}),n.breaks=a({},n.gfm,{br:o(n.br)("{2,}","*")(),text:o(n.gfm.text)("{2,}","*")()}),r.rules=n,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){var t="",n,r,i,o;while(e){if(o=this.rules.escape.exec(e)){e=e.substring(o[0].length),t+=o[1];continue}if(o=this.rules.autolink.exec(e)){e=e.substring(o[0].length),o[2]==="@"?(r=o[1][6]===":"?this.mangle(o[1].substring(7)):this.mangle(o[1]),i=this.mangle("mailto:")+r):(r=s(o[1]),i=r),t+=''+r+"";continue}if(o=this.rules.url.exec(e)){e=e.substring(o[0].length),r=s(o[1]),i=r,t+=''+r+"";continue}if(o=this.rules.tag.exec(e)){e=e.substring(o[0].length),t+=this.options.sanitize?s(o[0]):o[0];continue}if(o=this.rules.link.exec(e)){e=e.substring(o[0].length),t+=this.outputLink(o,{href:o[2],title:o[3]});continue}if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){e=e.substring(o[0].length),n=(o[2]||o[1]).replace(/\s+/g," "),n=this.links[n.toLowerCase()];if(!n||!n.href){t+=o[0][0],e=o[0].substring(1)+e;continue}t+=this.outputLink(o,n);continue}if(o=this.rules.strong.exec(e)){e=e.substring(o[0].length),t+=""+this.output(o[2]||o[1])+"";continue}if(o=this.rules.em.exec(e)){e=e.substring(o[0].length),t+=""+this.output(o[2]||o[1])+"";continue}if(o=this.rules.code.exec(e)){e=e.substring(o[0].length),t+=""+s(o[2],!0)+"";continue}if(o=this.rules.br.exec(e)){e=e.substring(o[0].length),t+="
    ";continue}if(o=this.rules.del.exec(e)){e=e.substring(o[0].length),t+=""+this.output(o[1])+"";continue}if(o=this.rules.text.exec(e)){e=e.substring(o[0].length),t+=s(o[0]);continue}if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}return t},r.prototype.outputLink=function(e,t){return e[0][0]!=="!"?'"+this.output(e[1])+"":''+s(e[1])+'"},r.prototype.mangle=function(e){var t="",n=e.length,r=0,i;for(;r.5&&(i="x"+i.toString(16)),t+="&#"+i+";";return t},i.parse=function(e,t){var n=new i(t);return n.parse(e)},i.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.tokens=e.reverse();var t="";while(this.next())t+=this.tok();return t},i.prototype.next=function(){return this.token=this.tokens.pop()},i.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},i.prototype.parseText=function(){var e=this.token.text;while(this.peek().type==="text")e+="\n"+this.next().text;return this.inline.output(e)},i.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return"
    \n";case"heading":return""+this.inline.output(this.token.text)+"\n";case"code":if(this.options.highlight){var e=this.options.highlight(this.token.text,this.token.lang);e!=null&&e!==this.token.text&&(this.token.escaped=!0,this.token.text=e)}return this.token.escaped||(this.token.text=s(this.token.text,!0)),"
    "+this.token.text+"
    \n";case"table":var t="",n,r,i,o,u;t+="\n\n";for(r=0;r'+n+"\n":""+n+"\n";t+="\n\n",t+="\n";for(r=0;r\n";for(u=0;u'+o+"\n":""+o+"\n";t+="\n"}return t+="\n","\n"+t+"
    \n";case"blockquote_start":var t="";while(this.next().type!=="blockquote_end" -)t+=this.tok();return"
    \n"+t+"
    \n";case"list_start":var a=this.token.ordered?"ol":"ul",t="";while(this.next().type!=="list_end")t+=this.tok();return"<"+a+">\n"+t+"\n";case"list_item_start":var t="";while(this.next().type!=="list_item_end")t+=this.token.type==="text"?this.parseText():this.tok();return"
  • "+t+"
  • \n";case"loose_item_start":var t="";while(this.next().type!=="list_item_end")t+=this.tok();return"
  • "+t+"
  • \n";case"html":return!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;case"paragraph":return"

    "+this.inline.output(this.token.text)+"

    \n";case"text":return"

    "+this.parseText()+"

    \n"}},u.exec=u,f.options=f.setOptions=function(e){return f.defaults=e,f},f.defaults={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,silent:!1,highlight:null},f.Parser=i,f.parser=i.parse,f.Lexer=t,f.lexer=t.lex,f.InlineLexer=r,f.inlineLexer=r.output,f.parse=f,typeof module!="undefined"?module.exports=f:typeof define=="function"&&define.amd?define(function(){return f}):this.marked=f}.call(function(){return this||(typeof window!="undefined"?window:global)}()); \ No newline at end of file diff --git a/lib/EpicEditor/themes/base/epiceditor.css b/lib/EpicEditor/themes/base/epiceditor.css deleted file mode 100644 index 76e58fc..0000000 --- a/lib/EpicEditor/themes/base/epiceditor.css +++ /dev/null @@ -1,70 +0,0 @@ -html, body, iframe, div { - margin:0; - padding:0; -} - -#epiceditor-utilbar { - position:fixed; - bottom:10px; - right:10px; -} - -#epiceditor-utilbar button { - display:block; - float:left; - width:30px; - height:30px; - border:none; - background:none; -} - -#epiceditor-utilbar button.epiceditor-toggle-preview-btn { - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAf9JREFUeNrsVu1twjAQLZmAEcIGYYKGDWACkgkSkPiQ+CifAoEgyQTQDegEpROQDZoRMgH0HToj1yIglKr90Vg62T6f/e4d9gu50+n09BctlwFnwP8TOAgCA10VRr2ZELaHhbBXx3HCVMC+71voXmD6g4Qi2NB13e1DwAAkZhtmmKYRcxsJhHeBPc8bMMufbDU0PxF4vV4TSyth8477csI6lTV/a71er9tioonBarXaIAmLErliNWyqoM8nrJPpHFNLWLcI4xvj5XKpMo2ZgcvzIvs+75S0wKwPPB/CnpWXsG00Gra2WCwshekOVoC9Sb6IGN1ge2HNsWK+B0iJqxAL5oSpYeDJJW02mxVYLAWSGfDtebylA68Bc4wh+ahK5PcxLh6PR5GUpym/iTOfz89PqNVqhRI4iQf1/o174HNMVYDSGeTDmXQ3znogCGrtdpsYVBhER1aH2Wzm8iE7UR74DMTWGNxUQWmNYqTEzq8APoo9sJ8wKoR5eU7T6VQVjZAvx4YvDJWt1Ol0QsTqkppF8EW8/12OhTnSpT2LCe2/KiCTyUQVkJgPuwgb6XG32w05Xui4q0imLLNDxA/uSuZ4PNaZqZlSsejDYfd6veihj8RoNDK5XOUHAen3Dfr9/j7VZxEJ6AwuxCCvhMTM7oNAARhl/0Ay4Az419qXAAMAfBdK7281j6YAAAAASUVORK5CYII=); -} - -#epiceditor-utilbar button.epiceditor-toggle-edit-btn { - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnVJREFUeNrsV+lt4lAQNtEWAB2QCtZ0ABWsqYB1BU5AgDgkQOISl9cV4FQQtgLYCuKtIN4K4gogM9H3pMmLTTh24c+O9An7+XnOb8aP1G63M64hN8aV5GqGvxyyyfO8Y3S6hDtc2wTfcZyLRPwdvxEbPSviIwjIRtO49s9ONSRLMIGvwkBI+EPYEEqyQmcZdl2Xo3BgcJ90xPUGDh1veLFYWCBK9oQ6P4BgiXVO6fUjg5zCJcE6kVxsLEN4QTlWzO5yuRwlGp7P55zOxz1RRqK2SfKD8BvOG4IHxUqlEnxop9lsZpITa0KWndGwIeQIXswzHbynpK2xzjXbeBfxdDrlhbUWjYyuiJS9fBJxgL3PItKsprNQrVaD1GQyYUVP2oYelDziPoPnT5+k2QajleEC3usI/exM7oYiXor0hpxS8qhLv5FIVVrcBwkp5ueclbS27qNMvkj7kg3nZX1qtVqAaSUN5OGUwn2M4RUb3263plh700E6I7wTKn1suCAW3PF4zL1r1Ov1SBhXZLEJFqGTQCq5N1BZIp3s+DOi5fXcG7lGo1Ea5DIFSWzcq7a4R6uYqJmlkSqHoeGKeq+w905MtGKj0Yje9TE5ID9pqictQQwmXTfh82cIJ0NML0d0QY8MdhMn13A4zENB0hAJEYn6EnGL3MZ0hsyG3Ww2g70jU8lgMOhqHicJz+KfovVkz3J5/FardfhBgDZzS90SeoJ8cXjQJlUAEmZUCx30kYiTfr9vgFRc72+ChCHSzNH+Qgk+fA7b7fZZJ5AAiIRhT4zUv3/Y07LiaPW9yPE2L5jrI/p/d7wVEZe0U8bJkvr/F+ZS8irAAIorRozUvI0gAAAAAElFTkSuQmCC); -} - -#epiceditor-utilbar button.epiceditor-fullscreen-btn { - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY5JREFUeNrsV8tthDAQhYgCtoV04BKghK2En5AQBw4IITjwq2RLgBJcwpawHZAxMpGDYGwTFPaQkUbG1sybj58NmNM0GVfIh3GRXBbYEid932N9d1zXHWWAGAb4m+9VsUA0H5SubKkKIGA4qyUC2qKBxSCe541HKln7dV2nVbHRtq0Nw7CXGNtz/jzwqjZ5odtqTOagQRC82KRpGkcS/L2Ok7lXZV3Xp7Q6DMNR2mqNthMhKXLqzcUCc6Wgn3wU1wlX1PboHs8tjaLoyVtLT7JFK2ZZM6CZvWyE+X1Voaj3la3DMA63epGqqm4wfyCBH8xmz1+Z1WVZ2vyqU2HvHtv9OI4PsRpjL91YV2a7pcB8onmOifYFUhSFLQCTnQtkDpokyYv73JBtcAQsA3zGTXJBEgNXgrF3CcrBZGwnC+4uqxHnH+zN8/ybvexZwvZNhlsHbrt5CyCgDtu1XosUe58K4kuOF9EKnKYp20eVrxDUJssyreM0bDg4kIw0EfCbftvqQ6KKYf7/wvyVfAkwAMjqoFSaWbrBAAAAAElFTkSuQmCC); -} - -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and ( min--moz-device-pixel-ratio: 2), -only screen and ( -o-min-device-pixel-ratio: 2/1), -only screen and ( min-device-pixel-ratio: 2), -only screen and ( min-resolution: 192dpi), -only screen and ( min-resolution: 2dppx) { - #epiceditor-utilbar button.epiceditor-toggle-preview-btn { - background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAABrVBMVEWIiIiHh4eIiIiJiYmEhISEhISEhISMjIyNjY2MjIyNjY2MjIyFhYWDg4OFhYWKioqKioqBgYGJiYmJiYmJiYmKioqKioqFhYWIiIiJiYmIiIiJiYmIiIiGhoaIiIiGhoaIiIiHh4eHh4eGhoaFhYWKioqFhYWEhISFhYWEhISDg4ONjY2NjY2MjIyHh4eMjIyLi4uCgoKCgoKCgoKBgYGBgYGOjo6Ojo6BgYGPj4+Ojo6Hh4eNjY2Pj4+BgYGNjY2BgYGHh4eQkJCNjY2FhYWHh4eDg4OQkJCQkJCAgICCgoKAgICAgICQkJCQkJCQkJCAgICQkJCAgICQkJCFhYWHh4eHh4eGhoaKioqGhoaMjIyDg4OEhISDg4OEhISDg4OEhISKioqBgYGJiYmKioqKioqJiYmMjIyEhISCgoKGhoaLi4uPj4+Pj4+BgYGKioqDg4OGhoaGhoaMjIyHh4eEhISEhISDg4OIiIiJiYmGhoaHh4eJiYkAAACAgICFhYWQkJCIiIiEhISLi4uDg4OHh4eGhoaCgoKBgYGJiYmMjIyOjo6KioqNjY2Pj4+o6Lr0AAAAfnRSTlPfvxDPEL8gv5/Pr3AQ3++vn8+/cCCA34/vj8/vMJ+vgJ+vYN/fMIBAv4/v38/v39+PgBBg74DPgGAwMHDvrzBQj1AggJ8wIHC/IM9gjxBQgO+vv89Qz0C/70Bgz89ggIDvYN/fII8wIHDvMJ+/QBBAMBDPnxBgML9AEI/vQACT8cYwAAACXElEQVR42u2WV1caURRGJ73H9J7YW+y99957ARREURAFQRFEOFGMkybxN+eec2cWUwBnrTwli/1yvvnm7PvEuoMAf0FGzsj/nDwxOTUzdyoxNzM1OWFU7h0aPtUxPNRrQPZ0XKagw3OF7Nm9TMOuJ43cQmpavSWV3HRhgKakcmvjhSEaW/VyV/tvg7R3aeU+9ULZ/fLEQ/ndMvXbPrV88EvBvQdOMCsLMzjNd5TFgSTr3SpWOCuUTYWTVVV6m+Sdr0qqqVGxw6pqXUPyZlziFaU9Vi3HVSyzag+D/YlcbXLZLm+85AsOgMK4hkIABz/YkSVVdpS3fnKevQCIYgCcGqKslGd0g3dbIIR5fP8cZCkMdOANWeSLEJZklt5StxEWcmLIuw+AHGE+YiEWE67jGxnlO8xv8OGTEBGRRSACmNtYyBUjgcCCKJPLqjYMAeD04ENEGIjQ7AGikuUFNhdF8Vogj0T5bDyqEjh55AwI4N7/hmRTe4zRxEM+ZuKYFSYeEP9HzPtuEFjm9pKf9W5KQLbKhSVMbkymfHL90i+s/wR5PM9iCaYiLOcLTogCrKEIYwkLD19T25/4bR+unSG3bkOQwiG1QZfV6gryBaqL5c01XCCZ9lbOCOvNUpouUOGishSK+dpKUHMZ2M6Jz7ZHNEO+hOoLUWVZZROx6a8hn+VcRWh1EOtBUuhcPiy+pBdg3fZ3DaOj2ma7LtXVW1uj0XVqTW2aS9/bUP8jJfUN3is+N97mp8nV9Wavka9kZ/e6zuzuNP59Hhkbn53+QkzPjo+NZP6TZOSM/L/LfwAJ69Ba3fXmtwAAAABJRU5ErkJggg==); - background-size: 30px 30px; - } - - #epiceditor-utilbar button.epiceditor-toggle-edit-btn { - background:url(data:image/png;base64,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); - background-size: 30px 30px; - } - - #epiceditor-utilbar button.epiceditor-fullscreen-btn { - background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAA5FBMVEWPj4+JiYmJiYmCgoKGhoaPj4+Li4uEhISAgICNjY2Li4uNjY2QkJCFhYWEhISLi4uHh4eHh4eIiIiHh4eGhoaHh4eEhISOjo6EhISJiYmFhYWJiYmFhYWNjY2NjY2Hh4eOjo6CgoKGhoaKioqKioqJiYmKioqDg4ODg4OBgYGGhoaKioqKioqLi4uMjIyMjIyIiIiIiIiMjIyOjo6GhoaDg4ONjY2EhISPj4+CgoIAAACJiYmHh4eIiIiFhYWCgoKPj4+Li4uAgICKioqEhISGhoaBgYGOjo6MjIyQkJCNjY2Dg4O2Jy/OAAAAO3RSTlMQz0DPEHDPz0DvMDBAQBBAQBAQz88wMM/v7zAw788Q7xAQQM9AEBDPEEAwMO/v7zDvMEBA70BAQEBAAAENmbYAAAG1SURBVHja7dftM0JREMdxD5GkEEqKpBJRSc8rQq7Q////2Dnm3t85jtkTmmGG75t7Z3c/t9fN0Tf6x1/Dz0ZrZGZf/BJ8a9QjM/vCwks9Px5aBcslC+P3nPVmi8dcczrcHHM2flug1CHRYcoYNd0YFlrAL1yHqPOC9g9IdbAfjHAjYFjoT+FI1MfRiAM/cZdEl0+oVidVvRaMcAOMgJWGBUYSVhrWjdfvjKqrq1Vzsu7Cy1Vo7XXZhYuj0ahwfHY+sjo/Oy7woyhitkTQsESsZawstG6VlvDCfIlUmfSVVjpDqtL8goBLbKFhsRcwalxcB100CDkxLLQbJxKwpvb3At7Y2iRuJzd4V26HuM2tDQkPWMOamu1Awkeetx2qtDy/lvZaCW173pGIWetA/xBbF+ZgiVgjGcdutLJ7xO1l9VnMiWGhJdzl4vx4CNpN+ifJXUy7RPEuZ2C1AIY1NG5kHI4Dx8MynnBtovYkqHzi25OyP8ONiKFh3djQsCIecn2i/lBvMU+UXxwi3HyE832jvD0RsLuP8CN3Oh0+feRmixE+g7CdLb43WiEz++Jb+M//x/gB/ArCl0G4nsFuEQAAAABJRU5ErkJggg==); - background-size: 30px 30px; - } -} - -#epiceditor-utilbar button:last-child { - margin-left:15px; -} - -#epiceditor-utilbar button:hover { - cursor:pointer; -} - -.epiceditor-edit-mode #epiceditor-utilbar button.epiceditor-toggle-edit-btn { - display:none; -} - -.epiceditor-preview-mode #epiceditor-utilbar button.epiceditor-toggle-preview-btn { - display:none; -} diff --git a/lib/EpicEditor/themes/editor/epic-dark.css b/lib/EpicEditor/themes/editor/epic-dark.css deleted file mode 100644 index 058ace6..0000000 --- a/lib/EpicEditor/themes/editor/epic-dark.css +++ /dev/null @@ -1,13 +0,0 @@ -html { padding:10px; } - -body { - border:0; - background:rgb(41,41,41); - font-family:monospace; - font-size:14px; - padding:10px; - color:#ddd; - line-height:1.35em; - margin:0; - padding:0; -} diff --git a/lib/EpicEditor/themes/editor/epic-light.css b/lib/EpicEditor/themes/editor/epic-light.css deleted file mode 100644 index 9411cec..0000000 --- a/lib/EpicEditor/themes/editor/epic-light.css +++ /dev/null @@ -1,12 +0,0 @@ -html { padding:10px; } - -body { - border:0; - background:#fcfcfc; - font-family:monospace; - font-size:14px; - padding:10px; - line-height:1.35em; - margin:0; - padding:0; -} diff --git a/lib/EpicEditor/themes/preview/bartik.css b/lib/EpicEditor/themes/preview/bartik.css deleted file mode 100644 index 2ffb6d5..0000000 --- a/lib/EpicEditor/themes/preview/bartik.css +++ /dev/null @@ -1,167 +0,0 @@ -body { - font-family: Georgia, "Times New Roman", Times, serif; - line-height: 1.5; - font-size: 87.5%; - word-wrap: break-word; - margin: 2em; - padding: 0; - border: 0; - outline: 0; - background: #fff; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 1.0em 0 0.5em; - font-weight: inherit; -} - -h1 { - font-size: 1.357em; - color: #000; -} - -h2 { - font-size: 1.143em; -} - -p { - margin: 0 0 1.2em; -} - -del { - text-decoration: line-through; -} - -tr:nth-child(odd) { - background-color: #dddddd; -} - -img { - outline: 0; -} - -code { - background-color: #f2f2f2; - background-color: rgba(40, 40, 0, 0.06); -} - -pre { - background-color: #f2f2f2; - background-color: rgba(40, 40, 0, 0.06); - margin: 10px 0; - overflow: hidden; - padding: 15px; - white-space: pre-wrap; -} - -pre code { - font-size: 100%; - background-color: transparent; -} - -blockquote { - background: #f7f7f7; - border-left: 1px solid #bbb; - font-style: italic; - margin: 1.5em 10px; - padding: 0.5em 10px; -} - -blockquote:before { - color: #bbb; - content: "\201C"; - font-size: 3em; - line-height: 0.1em; - margin-right: 0.2em; - vertical-align: -.4em; -} - -blockquote:after { - color: #bbb; - content: "\201D"; - font-size: 3em; - line-height: 0.1em; - vertical-align: -.45em; -} - -blockquote > p:first-child { - display: inline; -} - -table { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - border: 0; - border-spacing: 0; - font-size: 0.857em; - margin: 10px 0; - width: 100%; -} - -table table { - font-size: 1em; -} - -table tr th { - background: #757575; - background: rgba(0, 0, 0, 0.51); - border-bottom-style: none; -} - -table tr th, -table tr th a, -table tr th a:hover { - color: #FFF; - font-weight: bold; -} - -table tbody tr th { - vertical-align: top; -} - -tr td, -tr th { - padding: 4px 9px; - border: 1px solid #fff; - text-align: left; /* LTR */ -} - -tr:nth-child(odd) { - background: #e4e4e4; - background: rgba(0, 0, 0, 0.105); -} - -tr, -tr:nth-child(even) { - background: #efefef; - background: rgba(0, 0, 0, 0.063); -} - -a { - color: #0071B3; -} - -a:hover, -a:focus { - color: #018fe2; -} - -a:active { - color: #23aeff; -} - -a:link, -a:visited { - text-decoration: none; -} - -a:hover, -a:active, -a:focus { - text-decoration: underline; -} - diff --git a/lib/EpicEditor/themes/preview/github.css b/lib/EpicEditor/themes/preview/github.css deleted file mode 100644 index 4c78db4..0000000 --- a/lib/EpicEditor/themes/preview/github.css +++ /dev/null @@ -1,368 +0,0 @@ -html { padding:0 10px; } - -body { - margin:0; - padding:0; - background:#fff; -} - -#epiceditor-wrapper{ - background:white; -} - -#epiceditor-preview{ - padding-top:10px; - padding-bottom:10px; - font-family: Helvetica,arial,freesans,clean,sans-serif; - font-size:13px; - line-height:1.6; -} - -#epiceditor-preview>*:first-child{ - margin-top:0!important; -} - -#epiceditor-preview>*:last-child{ - margin-bottom:0!important; -} - -#epiceditor-preview a{ - color:#4183C4; - text-decoration:none; -} - -#epiceditor-preview a:hover{ - text-decoration:underline; -} - -#epiceditor-preview h1, -#epiceditor-preview h2, -#epiceditor-preview h3, -#epiceditor-preview h4, -#epiceditor-preview h5, -#epiceditor-preview h6{ - margin:20px 0 10px; - padding:0; - font-weight:bold; - -webkit-font-smoothing:antialiased; -} - -#epiceditor-preview h1 tt, -#epiceditor-preview h1 code, -#epiceditor-preview h2 tt, -#epiceditor-preview h2 code, -#epiceditor-preview h3 tt, -#epiceditor-preview h3 code, -#epiceditor-preview h4 tt, -#epiceditor-preview h4 code, -#epiceditor-preview h5 tt, -#epiceditor-preview h5 code, -#epiceditor-preview h6 tt, -#epiceditor-preview h6 code{ - font-size:inherit; -} - -#epiceditor-preview h1{ - font-size:28px; - color:#000; -} - -#epiceditor-preview h2{ - font-size:24px; - border-bottom:1px solid #ccc; - color:#000; -} - -#epiceditor-preview h3{ - font-size:18px; -} - -#epiceditor-preview h4{ - font-size:16px; -} - -#epiceditor-preview h5{ - font-size:14px; -} - -#epiceditor-preview h6{ - color:#777; - font-size:14px; -} - -#epiceditor-preview p, -#epiceditor-preview blockquote, -#epiceditor-preview ul, -#epiceditor-preview ol, -#epiceditor-preview dl, -#epiceditor-preview li, -#epiceditor-preview table, -#epiceditor-preview pre{ - margin:15px 0; -} - -#epiceditor-preview hr{ - background:transparent url('../../images/modules/pulls/dirty-shade.png') repeat-x 0 0; - border:0 none; - color:#ccc; - height:4px; - padding:0; -} - -#epiceditor-preview>h2:first-child, -#epiceditor-preview>h1:first-child, -#epiceditor-preview>h1:first-child+h2, -#epiceditor-preview>h3:first-child, -#epiceditor-preview>h4:first-child, -#epiceditor-preview>h5:first-child, -#epiceditor-preview>h6:first-child{ - margin-top:0; - padding-top:0; -} - -#epiceditor-preview h1+p, -#epiceditor-preview h2+p, -#epiceditor-preview h3+p, -#epiceditor-preview h4+p, -#epiceditor-preview h5+p, -#epiceditor-preview h6+p{ - margin-top:0; -} - -#epiceditor-preview li p.first{ - display:inline-block; -} - -#epiceditor-preview ul, -#epiceditor-preview ol{ - padding-left:30px; -} - -#epiceditor-preview ul li>:first-child, -#epiceditor-preview ol li>:first-child{ - margin-top:0; -} - -#epiceditor-preview ul li>:last-child, -#epiceditor-preview ol li>:last-child{ - margin-bottom:0; -} - -#epiceditor-preview dl{ - padding:0; -} - -#epiceditor-preview dl dt{ - font-size:14px; - font-weight:bold; - font-style:italic; - padding:0; - margin:15px 0 5px; -} - -#epiceditor-preview dl dt:first-child{ - padding:0; -} - -#epiceditor-preview dl dt>:first-child{ - margin-top:0; -} - -#epiceditor-preview dl dt>:last-child{ - margin-bottom:0; -} - -#epiceditor-preview dl dd{ - margin:0 0 15px; - padding:0 15px; -} - -#epiceditor-preview dl dd>:first-child{ - margin-top:0; -} - -#epiceditor-preview dl dd>:last-child{ - margin-bottom:0; -} - -#epiceditor-preview blockquote{ - border-left:4px solid #DDD; - padding:0 15px; - color:#777; -} - -#epiceditor-preview blockquote>:first-child{ - margin-top:0; -} - -#epiceditor-preview blockquote>:last-child{ - margin-bottom:0; -} - -#epiceditor-preview table{ - padding:0; - border-collapse: collapse; - border-spacing: 0; - font-size: 100%; - font: inherit; -} - -#epiceditor-preview table tr{ - border-top:1px solid #ccc; - background-color:#fff; - margin:0; - padding:0; -} - -#epiceditor-preview table tr:nth-child(2n){ - background-color:#f8f8f8; -} - -#epiceditor-preview table tr th{ - font-weight:bold; -} - -#epiceditor-preview table tr th, -#epiceditor-preview table tr td{ - border:1px solid #ccc; - text-align:left; - margin:0; - padding:6px 13px; -} - -#epiceditor-preview table tr th>:first-child, -#epiceditor-preview table tr td>:first-child{ - margin-top:0; -} - -#epiceditor-preview table tr th>:last-child, -#epiceditor-preview table tr td>:last-child{ - margin-bottom:0; -} - -#epiceditor-preview img{ - max-width:100%; -} - -#epiceditor-preview span.frame{ - display:block; - overflow:hidden; -} - -#epiceditor-preview span.frame>span{ - border:1px solid #ddd; - display:block; - float:left; - overflow:hidden; - margin:13px 0 0; - padding:7px; - width:auto; -} - -#epiceditor-preview span.frame span img{ - display:block; - float:left; -} - -#epiceditor-preview span.frame span span{ - clear:both; - color:#333; - display:block; - padding:5px 0 0; -} - -#epiceditor-preview span.align-center{ - display:block; - overflow:hidden; - clear:both; -} - -#epiceditor-preview span.align-center>span{ - display:block; - overflow:hidden; - margin:13px auto 0; - text-align:center; -} - -#epiceditor-preview span.align-center span img{ - margin:0 auto; - text-align:center; -} - -#epiceditor-preview span.align-right{ - display:block; - overflow:hidden; - clear:both; -} - -#epiceditor-preview span.align-right>span{ - display:block; - overflow:hidden; - margin:13px 0 0; - text-align:right; -} - -#epiceditor-preview span.align-right span img{ - margin:0; - text-align:right; -} - -#epiceditor-preview span.float-left{ - display:block; - margin-right:13px; - overflow:hidden; - float:left; -} - -#epiceditor-preview span.float-left span{ - margin:13px 0 0; -} - -#epiceditor-preview span.float-right{ - display:block; - margin-left:13px; - overflow:hidden; - float:right; -} - -#epiceditor-preview span.float-right>span{ - display:block; - overflow:hidden; - margin:13px auto 0; - text-align:right; -} - -#epiceditor-preview code, -#epiceditor-preview tt{ - margin:0 2px; - padding:0 5px; - white-space:nowrap; - border:1px solid #eaeaea; - background-color:#f8f8f8; - border-radius:3px; -} - -#epiceditor-preview pre>code{ - margin:0; - padding:0; - white-space:pre; - border:none; - background:transparent; -} - -#epiceditor-preview .highlight pre, -#epiceditor-preview pre{ - background-color:#f8f8f8; - border:1px solid #ccc; - font-size:13px; - line-height:19px; - overflow:auto; - padding:6px 10px; - border-radius:3px; -} - -#epiceditor-preview pre code, -#epiceditor-preview pre tt{ - background-color:transparent; - border:none; -} diff --git a/lib/EpicEditor/themes/preview/preview-dark.css b/lib/EpicEditor/themes/preview/preview-dark.css deleted file mode 100644 index 620c193..0000000 --- a/lib/EpicEditor/themes/preview/preview-dark.css +++ /dev/null @@ -1,121 +0,0 @@ -html { padding:0 10px; } - -body { - margin:0; - padding:10px 0; - background:#000; -} - -#epiceditor-preview h1, -#epiceditor-preview h2, -#epiceditor-preview h3, -#epiceditor-preview h4, -#epiceditor-preview h5, -#epiceditor-preview h6, -#epiceditor-preview p, -#epiceditor-preview blockquote { - margin: 0; - padding: 0; -} -#epiceditor-preview { - background:#000; - font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif; - font-size: 13px; - line-height: 18px; - color: #ccc; -} -#epiceditor-preview a { - color: #fff; -} -#epiceditor-preview a:hover { - color: #00ff00; - text-decoration: none; -} -#epiceditor-preview a img { - border: none; -} -#epiceditor-preview p { - margin-bottom: 9px; -} -#epiceditor-preview h1, -#epiceditor-preview h2, -#epiceditor-preview h3, -#epiceditor-preview h4, -#epiceditor-preview h5, -#epiceditor-preview h6 { - color: #cdcdcd; - line-height: 36px; -} -#epiceditor-preview h1 { - margin-bottom: 18px; - font-size: 30px; -} -#epiceditor-preview h2 { - font-size: 24px; -} -#epiceditor-preview h3 { - font-size: 18px; -} -#epiceditor-preview h4 { - font-size: 16px; -} -#epiceditor-preview h5 { - font-size: 14px; -} -#epiceditor-preview h6 { - font-size: 13px; -} -#epiceditor-preview hr { - margin: 0 0 19px; - border: 0; - border-bottom: 1px solid #ccc; -} -#epiceditor-preview blockquote { - padding: 13px 13px 21px 15px; - margin-bottom: 18px; - font-family:georgia,serif; - font-style: italic; -} -#epiceditor-preview blockquote:before { - content:"\201C"; - font-size:40px; - margin-left:-10px; - font-family:georgia,serif; - color:#eee; -} -#epiceditor-preview blockquote p { - font-size: 14px; - font-weight: 300; - line-height: 18px; - margin-bottom: 0; - font-style: italic; -} -#epiceditor-preview code, #epiceditor-preview pre { - font-family: Monaco, Andale Mono, Courier New, monospace; -} -#epiceditor-preview code { - background-color: #000; - color: #f92672; - padding: 1px 3px; - font-size: 12px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -#epiceditor-preview pre { - display: block; - padding: 14px; - color:#66d9ef; - margin: 0 0 18px; - line-height: 16px; - font-size: 11px; - border: 1px solid #d9d9d9; - white-space: pre-wrap; - word-wrap: break-word; -} -#epiceditor-preview pre code { - background-color: #000; - color:#ccc; - font-size: 11px; - padding: 0; -} diff --git a/lib/Michelf/Markdown.php b/lib/Michelf/Markdown.php deleted file mode 100644 index 094b0ee..0000000 --- a/lib/Michelf/Markdown.php +++ /dev/null @@ -1,3096 +0,0 @@ - -# -# Original Markdown -# Copyright (c) 2004-2006 John Gruber -# -# -namespace Michelf; - - -# -# Markdown Parser Class -# - -class Markdown { - - ### Version ### - - const MARKDOWNLIB_VERSION = "1.3"; - - ### Simple Function Interface ### - - public static function defaultTransform($text) { - # - # Initialize the parser and return the result of its transform method. - # This will work fine for derived classes too. - # - # Take parser class on which this function was called. - $parser_class = \get_called_class(); - - # try to take parser from the static parser list - static $parser_list; - $parser =& $parser_list[$parser_class]; - - # create the parser it not already set - if (!$parser) - $parser = new $parser_class; - - # Transform text using parser. - return $parser->transform($text); - } - - ### Configuration Variables ### - - # Change to ">" for HTML output. - public $empty_element_suffix = " />"; - public $tab_width = 4; - - # Change to `true` to disallow markup or entities. - public $no_markup = false; - public $no_entities = false; - - # Predefined urls and titles for reference links and images. - public $predef_urls = array(); - public $predef_titles = array(); - - - ### Parser Implementation ### - - # Regex to match balanced [brackets]. - # Needed to insert a maximum bracked depth while converting to PHP. - protected $nested_brackets_depth = 6; - protected $nested_brackets_re; - - protected $nested_url_parenthesis_depth = 4; - protected $nested_url_parenthesis_re; - - # Table of hash values for escaped characters: - protected $escape_chars = '\`*_{}[]()>#+-.!'; - protected $escape_chars_re; - - - public function __construct() { - # - # Constructor function. Initialize appropriate member variables. - # - $this->_initDetab(); - $this->prepareItalicsAndBold(); - - $this->nested_brackets_re = - str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth). - str_repeat('\])*', $this->nested_brackets_depth); - - $this->nested_url_parenthesis_re = - str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth). - str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth); - - $this->escape_chars_re = '['.preg_quote($this->escape_chars).']'; - - # Sort document, block, and span gamut in ascendent priority order. - asort($this->document_gamut); - asort($this->block_gamut); - asort($this->span_gamut); - } - - - # Internal hashes used during transformation. - protected $urls = array(); - protected $titles = array(); - protected $html_hashes = array(); - - # Status flag to avoid invalid nesting. - protected $in_anchor = false; - - - protected function setup() { - # - # Called before the transformation process starts to setup parser - # states. - # - # Clear global hashes. - $this->urls = $this->predef_urls; - $this->titles = $this->predef_titles; - $this->html_hashes = array(); - - $this->in_anchor = false; - } - - protected function teardown() { - # - # Called after the transformation process to clear any variable - # which may be taking up memory unnecessarly. - # - $this->urls = array(); - $this->titles = array(); - $this->html_hashes = array(); - } - - - public function transform($text) { - # - # Main function. Performs some preprocessing on the input text - # and pass it through the document gamut. - # - $this->setup(); - - # Remove UTF-8 BOM and marker character in input, if present. - $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text); - - # Standardize line endings: - # DOS to Unix and Mac to Unix - $text = preg_replace('{\r\n?}', "\n", $text); - - # Make sure $text ends with a couple of newlines: - $text .= "\n\n"; - - # Convert all tabs to spaces. - $text = $this->detab($text); - - # Turn block-level HTML blocks into hash entries - $text = $this->hashHTMLBlocks($text); - - # Strip any lines consisting only of spaces and tabs. - # This makes subsequent regexen easier to write, because we can - # match consecutive blank lines with /\n+/ instead of something - # contorted like /[ ]*\n+/ . - $text = preg_replace('/^[ ]+$/m', '', $text); - - # Run document gamut methods. - foreach ($this->document_gamut as $method => $priority) { - $text = $this->$method($text); - } - - $this->teardown(); - - return $text . "\n"; - } - - protected $document_gamut = array( - # Strip link definitions, store in hashes. - "stripLinkDefinitions" => 20, - - "runBasicBlockGamut" => 30, - ); - - - protected function stripLinkDefinitions($text) { - # - # Strips link definitions from text, stores the URLs and titles in - # hash references. - # - $less_than_tab = $this->tab_width - 1; - - # Link defs are in the form: ^[id]: url "optional title" - $text = preg_replace_callback('{ - ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1 - [ ]* - \n? # maybe *one* newline - [ ]* - (?: - <(.+?)> # url = $2 - | - (\S+?) # url = $3 - ) - [ ]* - \n? # maybe one newline - [ ]* - (?: - (?<=\s) # lookbehind for whitespace - ["(] - (.*?) # title = $4 - [")] - [ ]* - )? # title is optional - (?:\n+|\Z) - }xm', - array(&$this, '_stripLinkDefinitions_callback'), - $text); - return $text; - } - protected function _stripLinkDefinitions_callback($matches) { - $link_id = strtolower($matches[1]); - $url = $matches[2] == '' ? $matches[3] : $matches[2]; - $this->urls[$link_id] = $url; - $this->titles[$link_id] =& $matches[4]; - return ''; # String that will replace the block - } - - - protected function hashHTMLBlocks($text) { - if ($this->no_markup) return $text; - - $less_than_tab = $this->tab_width - 1; - - # Hashify HTML blocks: - # We only want to do this for block-level HTML tags, such as headers, - # lists, and tables. That's because we still want to wrap

    s around - # "paragraphs" that are wrapped in non-block-level tags, such as anchors, - # phrase emphasis, and spans. The list of tags we're looking for is - # hard-coded: - # - # * List "a" is made of tags which can be both inline or block-level. - # These will be treated block-level when the start tag is alone on - # its line, otherwise they're not matched here and will be taken as - # inline later. - # * List "b" is made of tags which are always block-level; - # - $block_tags_a_re = 'ins|del'; - $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'. - 'script|noscript|form|fieldset|iframe|math|svg|'. - 'article|section|nav|aside|hgroup|header|footer|'. - 'figure'; - - # Regular expression for the content of a block tag. - $nested_tags_level = 4; - $attr = ' - (?> # optional tag attributes - \s # starts with whitespace - (?> - [^>"/]+ # text outside quotes - | - /+(?!>) # slash not followed by ">" - | - "[^"]*" # text inside double quotes (tolerate ">") - | - \'[^\']*\' # text inside single quotes (tolerate ">") - )* - )? - '; - $content = - str_repeat(' - (?> - [^<]+ # content without tag - | - <\2 # nested opening tag - '.$attr.' # attributes - (?> - /> - | - >', $nested_tags_level). # end of opening tag - '.*?'. # last level nested tag content - str_repeat(' - # closing nested tag - ) - | - <(?!/\2\s*> # other tags with a different name - ) - )*', - $nested_tags_level); - $content2 = str_replace('\2', '\3', $content); - - # First, look for nested blocks, e.g.: - #

    - #
    - # tags for inner block must be indented. - #
    - #
    - # - # The outermost tags must start at the left margin for this to match, and - # the inner nested divs must be indented. - # We need to do this before the next, more liberal match, because the next - # match will start at the first `
    ` and stop at the first `
    `. - $text = preg_replace_callback('{(?> - (?> - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - - # Match from `\n` to `\n`, handling nested tags - # in between. - - [ ]{0,'.$less_than_tab.'} - <('.$block_tags_b_re.')# start tag = $2 - '.$attr.'> # attributes followed by > and \n - '.$content.' # content, support nesting - # the matching end tag - [ ]* # trailing spaces/tabs - (?=\n+|\Z) # followed by a newline or end of document - - | # Special version for tags of group a. - - [ ]{0,'.$less_than_tab.'} - <('.$block_tags_a_re.')# start tag = $3 - '.$attr.'>[ ]*\n # attributes followed by > - '.$content2.' # content, support nesting - # the matching end tag - [ ]* # trailing spaces/tabs - (?=\n+|\Z) # followed by a newline or end of document - - | # Special case just for
    . It was easier to make a special - # case than to make the other regex more complicated. - - [ ]{0,'.$less_than_tab.'} - <(hr) # start tag = $2 - '.$attr.' # attributes - /?> # the matching end tag - [ ]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - - | # Special case for standalone HTML comments: - - [ ]{0,'.$less_than_tab.'} - (?s: - - ) - [ ]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - - | # PHP and ASP-style processor instructions ( - ) - [ ]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - - ) - )}Sxmi', - array(&$this, '_hashHTMLBlocks_callback'), - $text); - - return $text; - } - protected function _hashHTMLBlocks_callback($matches) { - $text = $matches[1]; - $key = $this->hashBlock($text); - return "\n\n$key\n\n"; - } - - - protected function hashPart($text, $boundary = 'X') { - # - # Called whenever a tag must be hashed when a function insert an atomic - # element in the text stream. Passing $text to through this function gives - # a unique text-token which will be reverted back when calling unhash. - # - # The $boundary argument specify what character should be used to surround - # the token. By convension, "B" is used for block elements that needs not - # to be wrapped into paragraph tags at the end, ":" is used for elements - # that are word separators and "X" is used in the general case. - # - # Swap back any tag hash found in $text so we do not have to `unhash` - # multiple times at the end. - $text = $this->unhash($text); - - # Then hash the block. - static $i = 0; - $key = "$boundary\x1A" . ++$i . $boundary; - $this->html_hashes[$key] = $text; - return $key; # String that will replace the tag. - } - - - protected function hashBlock($text) { - # - # Shortcut function for hashPart with block-level boundaries. - # - return $this->hashPart($text, 'B'); - } - - - protected $block_gamut = array( - # - # These are all the transformations that form block-level - # tags like paragraphs, headers, and list items. - # - "doHeaders" => 10, - "doHorizontalRules" => 20, - - "doLists" => 40, - "doCodeBlocks" => 50, - "doBlockQuotes" => 60, - ); - - protected function runBlockGamut($text) { - # - # Run block gamut tranformations. - # - # We need to escape raw HTML in Markdown source before doing anything - # else. This need to be done for each block, and not only at the - # begining in the Markdown function since hashed blocks can be part of - # list items and could have been indented. Indented blocks would have - # been seen as a code block in a previous pass of hashHTMLBlocks. - $text = $this->hashHTMLBlocks($text); - - return $this->runBasicBlockGamut($text); - } - - protected function runBasicBlockGamut($text) { - # - # Run block gamut tranformations, without hashing HTML blocks. This is - # useful when HTML blocks are known to be already hashed, like in the first - # whole-document pass. - # - foreach ($this->block_gamut as $method => $priority) { - $text = $this->$method($text); - } - - # Finally form paragraph and restore hashed blocks. - $text = $this->formParagraphs($text); - - return $text; - } - - - protected function doHorizontalRules($text) { - # Do Horizontal Rules: - return preg_replace( - '{ - ^[ ]{0,3} # Leading space - ([-*_]) # $1: First marker - (?> # Repeated marker group - [ ]{0,2} # Zero, one, or two spaces. - \1 # Marker character - ){2,} # Group repeated at least twice - [ ]* # Tailing spaces - $ # End of line. - }mx', - "\n".$this->hashBlock("empty_element_suffix")."\n", - $text); - } - - - protected $span_gamut = array( - # - # These are all the transformations that occur *within* block-level - # tags like paragraphs, headers, and list items. - # - # Process character escapes, code spans, and inline HTML - # in one shot. - "parseSpan" => -30, - - # Process anchor and image tags. Images must come first, - # because ![foo][f] looks like an anchor. - "doImages" => 10, - "doAnchors" => 20, - - # Make links out of things like `` - # Must come after doAnchors, because you can use < and > - # delimiters in inline links like [this](). - "doAutoLinks" => 30, - "encodeAmpsAndAngles" => 40, - - "doItalicsAndBold" => 50, - "doHardBreaks" => 60, - ); - - protected function runSpanGamut($text) { - # - # Run span gamut tranformations. - # - foreach ($this->span_gamut as $method => $priority) { - $text = $this->$method($text); - } - - return $text; - } - - - protected function doHardBreaks($text) { - # Do hard breaks: - return preg_replace_callback('/ {2,}\n/', - array(&$this, '_doHardBreaks_callback'), $text); - } - protected function _doHardBreaks_callback($matches) { - return $this->hashPart("empty_element_suffix\n"); - } - - - protected function doAnchors($text) { - # - # Turn Markdown link shortcuts into XHTML tags. - # - if ($this->in_anchor) return $text; - $this->in_anchor = true; - - # - # First, handle reference-style links: [link text] [id] - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ('.$this->nested_brackets_re.') # link text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - ) - }xs', - array(&$this, '_doAnchors_reference_callback'), $text); - - # - # Next, inline-style links: [link text](url "optional title") - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ('.$this->nested_brackets_re.') # link text = $2 - \] - \( # literal paren - [ \n]* - (?: - <(.+?)> # href = $3 - | - ('.$this->nested_url_parenthesis_re.') # href = $4 - ) - [ \n]* - ( # $5 - ([\'"]) # quote char = $6 - (.*?) # Title = $7 - \6 # matching quote - [ \n]* # ignore any spaces/tabs between closing quote and ) - )? # title is optional - \) - ) - }xs', - array(&$this, '_doAnchors_inline_callback'), $text); - - # - # Last, handle reference-style shortcuts: [link text] - # These must come last in case you've also got [link text][1] - # or [link text](/foo) - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ([^\[\]]+) # link text = $2; can\'t contain [ or ] - \] - ) - }xs', - array(&$this, '_doAnchors_reference_callback'), $text); - - $this->in_anchor = false; - return $text; - } - protected function _doAnchors_reference_callback($matches) { - $whole_match = $matches[1]; - $link_text = $matches[2]; - $link_id =& $matches[3]; - - if ($link_id == "") { - # for shortcut links like [this][] or [this]. - $link_id = $link_text; - } - - # lower-case and turn embedded newlines into spaces - $link_id = strtolower($link_id); - $link_id = preg_replace('{[ ]?\n}', ' ', $link_id); - - if (isset($this->urls[$link_id])) { - $url = $this->urls[$link_id]; - $url = $this->encodeAttribute($url); - - $result = "titles[$link_id] ) ) { - $title = $this->titles[$link_id]; - $title = $this->encodeAttribute($title); - $result .= " title=\"$title\""; - } - - $link_text = $this->runSpanGamut($link_text); - $result .= ">$link_text"; - $result = $this->hashPart($result); - } - else { - $result = $whole_match; - } - return $result; - } - protected function _doAnchors_inline_callback($matches) { - $whole_match = $matches[1]; - $link_text = $this->runSpanGamut($matches[2]); - $url = $matches[3] == '' ? $matches[4] : $matches[3]; - $title =& $matches[7]; - - $url = $this->encodeAttribute($url); - - $result = "encodeAttribute($title); - $result .= " title=\"$title\""; - } - - $link_text = $this->runSpanGamut($link_text); - $result .= ">$link_text"; - - return $this->hashPart($result); - } - - - protected function doImages($text) { - # - # Turn Markdown image shortcuts into tags. - # - # - # First, handle reference-style labeled images: ![alt text][id] - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - !\[ - ('.$this->nested_brackets_re.') # alt text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - - ) - }xs', - array(&$this, '_doImages_reference_callback'), $text); - - # - # Next, handle inline images: ![alt text](url "optional title") - # Don't forget: encode * and _ - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - !\[ - ('.$this->nested_brackets_re.') # alt text = $2 - \] - \s? # One optional whitespace character - \( # literal paren - [ \n]* - (?: - <(\S*)> # src url = $3 - | - ('.$this->nested_url_parenthesis_re.') # src url = $4 - ) - [ \n]* - ( # $5 - ([\'"]) # quote char = $6 - (.*?) # title = $7 - \6 # matching quote - [ \n]* - )? # title is optional - \) - ) - }xs', - array(&$this, '_doImages_inline_callback'), $text); - - return $text; - } - protected function _doImages_reference_callback($matches) { - $whole_match = $matches[1]; - $alt_text = $matches[2]; - $link_id = strtolower($matches[3]); - - if ($link_id == "") { - $link_id = strtolower($alt_text); # for shortcut links like ![this][]. - } - - $alt_text = $this->encodeAttribute($alt_text); - if (isset($this->urls[$link_id])) { - $url = $this->encodeAttribute($this->urls[$link_id]); - $result = "\"$alt_text\"";titles[$link_id])) { - $title = $this->titles[$link_id]; - $title = $this->encodeAttribute($title); - $result .= " title=\"$title\""; - } - $result .= $this->empty_element_suffix; - $result = $this->hashPart($result); - } - else { - # If there's no such link ID, leave intact: - $result = $whole_match; - } - - return $result; - } - protected function _doImages_inline_callback($matches) { - $whole_match = $matches[1]; - $alt_text = $matches[2]; - $url = $matches[3] == '' ? $matches[4] : $matches[3]; - $title =& $matches[7]; - - $alt_text = $this->encodeAttribute($alt_text); - $url = $this->encodeAttribute($url); - $result = "\"$alt_text\"";encodeAttribute($title); - $result .= " title=\"$title\""; # $title already quoted - } - $result .= $this->empty_element_suffix; - - return $this->hashPart($result); - } - - - protected function doHeaders($text) { - # Setext-style headers: - # Header 1 - # ======== - # - # Header 2 - # -------- - # - $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx', - array(&$this, '_doHeaders_callback_setext'), $text); - - # atx-style headers: - # # Header 1 - # ## Header 2 - # ## Header 2 with closing hashes ## - # ... - # ###### Header 6 - # - $text = preg_replace_callback('{ - ^(\#{1,6}) # $1 = string of #\'s - [ ]* - (.+?) # $2 = Header text - [ ]* - \#* # optional closing #\'s (not counted) - \n+ - }xm', - array(&$this, '_doHeaders_callback_atx'), $text); - - return $text; - } - protected function _doHeaders_callback_setext($matches) { - # Terrible hack to check we haven't found an empty list item. - if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1])) - return $matches[0]; - - $level = $matches[2]{0} == '=' ? 1 : 2; - $block = "".$this->runSpanGamut($matches[1]).""; - return "\n" . $this->hashBlock($block) . "\n\n"; - } - protected function _doHeaders_callback_atx($matches) { - $level = strlen($matches[1]); - $block = "".$this->runSpanGamut($matches[2]).""; - return "\n" . $this->hashBlock($block) . "\n\n"; - } - - - protected function doLists($text) { - # - # Form HTML ordered (numbered) and unordered (bulleted) lists. - # - $less_than_tab = $this->tab_width - 1; - - # Re-usable patterns to match list item bullets and number markers: - $marker_ul_re = '[*+-]'; - $marker_ol_re = '\d+[\.]'; - $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)"; - - $markers_relist = array( - $marker_ul_re => $marker_ol_re, - $marker_ol_re => $marker_ul_re, - ); - - foreach ($markers_relist as $marker_re => $other_marker_re) { - # Re-usable pattern to match any entirel ul or ol list: - $whole_list_re = ' - ( # $1 = whole list - ( # $2 - ([ ]{0,'.$less_than_tab.'}) # $3 = number of spaces - ('.$marker_re.') # $4 = first list item marker - [ ]+ - ) - (?s:.+?) - ( # $5 - \z - | - \n{2,} - (?=\S) - (?! # Negative lookahead for another list item marker - [ ]* - '.$marker_re.'[ ]+ - ) - | - (?= # Lookahead for another kind of list - \n - \3 # Must have the same indentation - '.$other_marker_re.'[ ]+ - ) - ) - ) - '; // mx - - # We use a different prefix before nested lists than top-level lists. - # See extended comment in _ProcessListItems(). - - if ($this->list_level) { - $text = preg_replace_callback('{ - ^ - '.$whole_list_re.' - }mx', - array(&$this, '_doLists_callback'), $text); - } - else { - $text = preg_replace_callback('{ - (?:(?<=\n)\n|\A\n?) # Must eat the newline - '.$whole_list_re.' - }mx', - array(&$this, '_doLists_callback'), $text); - } - } - - return $text; - } - protected function _doLists_callback($matches) { - # Re-usable patterns to match list item bullets and number markers: - $marker_ul_re = '[*+-]'; - $marker_ol_re = '\d+[\.]'; - $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)"; - - $list = $matches[1]; - $list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol"; - - $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re ); - - $list .= "\n"; - $result = $this->processListItems($list, $marker_any_re); - - $result = $this->hashBlock("<$list_type>\n" . $result . ""); - return "\n". $result ."\n\n"; - } - - protected $list_level = 0; - - protected function processListItems($list_str, $marker_any_re) { - # - # Process the contents of a single ordered or unordered list, splitting it - # into individual list items. - # - # The $this->list_level global keeps track of when we're inside a list. - # Each time we enter a list, we increment it; when we leave a list, - # we decrement. If it's zero, we're not in a list anymore. - # - # We do this because when we're not inside a list, we want to treat - # something like this: - # - # I recommend upgrading to version - # 8. Oops, now this line is treated - # as a sub-list. - # - # As a single paragraph, despite the fact that the second line starts - # with a digit-period-space sequence. - # - # Whereas when we're inside a list (or sub-list), that line will be - # treated as the start of a sub-list. What a kludge, huh? This is - # an aspect of Markdown's syntax that's hard to parse perfectly - # without resorting to mind-reading. Perhaps the solution is to - # change the syntax rules such that sub-lists must start with a - # starting cardinal number; e.g. "1." or "a.". - - $this->list_level++; - - # trim trailing blank lines: - $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str); - - $list_str = preg_replace_callback('{ - (\n)? # leading line = $1 - (^[ ]*) # leading whitespace = $2 - ('.$marker_any_re.' # list marker and space = $3 - (?:[ ]+|(?=\n)) # space only required if item is not empty - ) - ((?s:.*?)) # list item text = $4 - (?:(\n+(?=\n))|\n) # tailing blank line = $5 - (?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n)))) - }xm', - array(&$this, '_processListItems_callback'), $list_str); - - $this->list_level--; - return $list_str; - } - protected function _processListItems_callback($matches) { - $item = $matches[4]; - $leading_line =& $matches[1]; - $leading_space =& $matches[2]; - $marker_space = $matches[3]; - $tailing_blank_line =& $matches[5]; - - if ($leading_line || $tailing_blank_line || - preg_match('/\n{2,}/', $item)) - { - # Replace marker with the appropriate whitespace indentation - $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item; - $item = $this->runBlockGamut($this->outdent($item)."\n"); - } - else { - # Recursion for sub-lists: - $item = $this->doLists($this->outdent($item)); - $item = preg_replace('/\n+$/', '', $item); - $item = $this->runSpanGamut($item); - } - - return "
  • " . $item . "
  • \n"; - } - - - protected function doCodeBlocks($text) { - # - # Process Markdown `
    ` blocks.
    -	#
    -		$text = preg_replace_callback('{
    -				(?:\n\n|\A\n?)
    -				(	            # $1 = the code block -- one or more lines, starting with a space/tab
    -				  (?>
    -					[ ]{'.$this->tab_width.'}  # Lines must start with a tab or a tab-width of spaces
    -					.*\n+
    -				  )+
    -				)
    -				((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z)	# Lookahead for non-space at line-start, or end of doc
    -			}xm',
    -			array(&$this, '_doCodeBlocks_callback'), $text);
    -
    -		return $text;
    -	}
    -	protected function _doCodeBlocks_callback($matches) {
    -		$codeblock = $matches[1];
    -
    -		$codeblock = $this->outdent($codeblock);
    -		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
    -
    -		# trim leading newlines and trailing newlines
    -		$codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
    -
    -		$codeblock = "
    $codeblock\n
    "; - return "\n\n".$this->hashBlock($codeblock)."\n\n"; - } - - - protected function makeCodeSpan($code) { - # - # Create a code span markup for $code. Called from handleSpanToken. - # - $code = htmlspecialchars(trim($code), ENT_NOQUOTES); - return $this->hashPart("$code"); - } - - - protected $em_relist = array( - '' => '(?:(? '(?<=\S|^)(? '(?<=\S|^)(? '(?:(? '(?<=\S|^)(? '(?<=\S|^)(? '(?:(? '(?<=\S|^)(? '(?<=\S|^)(?em_relist as $em => $em_re) { - foreach ($this->strong_relist as $strong => $strong_re) { - # Construct list of allowed token expressions. - $token_relist = array(); - if (isset($this->em_strong_relist["$em$strong"])) { - $token_relist[] = $this->em_strong_relist["$em$strong"]; - } - $token_relist[] = $em_re; - $token_relist[] = $strong_re; - - # Construct master expression from list. - $token_re = '{('. implode('|', $token_relist) .')}'; - $this->em_strong_prepared_relist["$em$strong"] = $token_re; - } - } - } - - protected function doItalicsAndBold($text) { - $token_stack = array(''); - $text_stack = array(''); - $em = ''; - $strong = ''; - $tree_char_em = false; - - while (1) { - # - # Get prepared regular expression for seraching emphasis tokens - # in current context. - # - $token_re = $this->em_strong_prepared_relist["$em$strong"]; - - # - # Each loop iteration search for the next emphasis token. - # Each token is then passed to handleSpanToken. - # - $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE); - $text_stack[0] .= $parts[0]; - $token =& $parts[1]; - $text =& $parts[2]; - - if (empty($token)) { - # Reached end of text span: empty stack without emitting. - # any more emphasis. - while ($token_stack[0]) { - $text_stack[1] .= array_shift($token_stack); - $text_stack[0] .= array_shift($text_stack); - } - break; - } - - $token_len = strlen($token); - if ($tree_char_em) { - # Reached closing marker while inside a three-char emphasis. - if ($token_len == 3) { - # Three-char closing marker, close em and strong. - array_shift($token_stack); - $span = array_shift($text_stack); - $span = $this->runSpanGamut($span); - $span = "$span"; - $text_stack[0] .= $this->hashPart($span); - $em = ''; - $strong = ''; - } else { - # Other closing marker: close one em or strong and - # change current token state to match the other - $token_stack[0] = str_repeat($token{0}, 3-$token_len); - $tag = $token_len == 2 ? "strong" : "em"; - $span = $text_stack[0]; - $span = $this->runSpanGamut($span); - $span = "<$tag>$span"; - $text_stack[0] = $this->hashPart($span); - $$tag = ''; # $$tag stands for $em or $strong - } - $tree_char_em = false; - } else if ($token_len == 3) { - if ($em) { - # Reached closing marker for both em and strong. - # Closing strong marker: - for ($i = 0; $i < 2; ++$i) { - $shifted_token = array_shift($token_stack); - $tag = strlen($shifted_token) == 2 ? "strong" : "em"; - $span = array_shift($text_stack); - $span = $this->runSpanGamut($span); - $span = "<$tag>$span"; - $text_stack[0] .= $this->hashPart($span); - $$tag = ''; # $$tag stands for $em or $strong - } - } else { - # Reached opening three-char emphasis marker. Push on token - # stack; will be handled by the special condition above. - $em = $token{0}; - $strong = "$em$em"; - array_unshift($token_stack, $token); - array_unshift($text_stack, ''); - $tree_char_em = true; - } - } else if ($token_len == 2) { - if ($strong) { - # Unwind any dangling emphasis marker: - if (strlen($token_stack[0]) == 1) { - $text_stack[1] .= array_shift($token_stack); - $text_stack[0] .= array_shift($text_stack); - } - # Closing strong marker: - array_shift($token_stack); - $span = array_shift($text_stack); - $span = $this->runSpanGamut($span); - $span = "$span"; - $text_stack[0] .= $this->hashPart($span); - $strong = ''; - } else { - array_unshift($token_stack, $token); - array_unshift($text_stack, ''); - $strong = $token; - } - } else { - # Here $token_len == 1 - if ($em) { - if (strlen($token_stack[0]) == 1) { - # Closing emphasis marker: - array_shift($token_stack); - $span = array_shift($text_stack); - $span = $this->runSpanGamut($span); - $span = "$span"; - $text_stack[0] .= $this->hashPart($span); - $em = ''; - } else { - $text_stack[0] .= $token; - } - } else { - array_unshift($token_stack, $token); - array_unshift($text_stack, ''); - $em = $token; - } - } - } - return $text_stack[0]; - } - - - protected function doBlockQuotes($text) { - $text = preg_replace_callback('/ - ( # Wrap whole match in $1 - (?> - ^[ ]*>[ ]? # ">" at the start of a line - .+\n # rest of the first line - (.+\n)* # subsequent consecutive lines - \n* # blanks - )+ - ) - /xm', - array(&$this, '_doBlockQuotes_callback'), $text); - - return $text; - } - protected function _doBlockQuotes_callback($matches) { - $bq = $matches[1]; - # trim one level of quoting - trim whitespace-only lines - $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq); - $bq = $this->runBlockGamut($bq); # recurse - - $bq = preg_replace('/^/m', " ", $bq); - # These leading spaces cause problem with
     content, 
    -		# so we need to fix that:
    -		$bq = preg_replace_callback('{(\s*
    .+?
    )}sx', - array(&$this, '_doBlockQuotes_callback2'), $bq); - - return "\n". $this->hashBlock("
    \n$bq\n
    ")."\n\n"; - } - protected function _doBlockQuotes_callback2($matches) { - $pre = $matches[1]; - $pre = preg_replace('/^ /m', '', $pre); - return $pre; - } - - - protected function formParagraphs($text) { - # - # Params: - # $text - string to process with html

    tags - # - # Strip leading and trailing lines: - $text = preg_replace('/\A\n+|\n+\z/', '', $text); - - $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY); - - # - # Wrap

    tags and unhashify HTML blocks - # - foreach ($grafs as $key => $value) { - if (!preg_match('/^B\x1A[0-9]+B$/', $value)) { - # Is a paragraph. - $value = $this->runSpanGamut($value); - $value = preg_replace('/^([ ]*)/', "

    ", $value); - $value .= "

    "; - $grafs[$key] = $this->unhash($value); - } - else { - # Is a block. - # Modify elements of @grafs in-place... - $graf = $value; - $block = $this->html_hashes[$graf]; - $graf = $block; -// if (preg_match('{ -// \A -// ( # $1 =
    tag -//
    ]* -// \b -// markdown\s*=\s* ([\'"]) # $2 = attr quote char -// 1 -// \2 -// [^>]* -// > -// ) -// ( # $3 = contents -// .* -// ) -// (
    ) # $4 = closing tag -// \z -// }xs', $block, $matches)) -// { -// list(, $div_open, , $div_content, $div_close) = $matches; -// -// # We can't call Markdown(), because that resets the hash; -// # that initialization code should be pulled into its own sub, though. -// $div_content = $this->hashHTMLBlocks($div_content); -// -// # Run document gamut methods on the content. -// foreach ($this->document_gamut as $method => $priority) { -// $div_content = $this->$method($div_content); -// } -// -// $div_open = preg_replace( -// '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open); -// -// $graf = $div_open . "\n" . $div_content . "\n" . $div_close; -// } - $grafs[$key] = $graf; - } - } - - return implode("\n\n", $grafs); - } - - - protected function encodeAttribute($text) { - # - # Encode text for a double-quoted HTML attribute. This function - # is *not* suitable for attributes enclosed in single quotes. - # - $text = $this->encodeAmpsAndAngles($text); - $text = str_replace('"', '"', $text); - return $text; - } - - - protected function encodeAmpsAndAngles($text) { - # - # Smart processing for ampersands and angle brackets that need to - # be encoded. Valid character entities are left alone unless the - # no-entities mode is set. - # - if ($this->no_entities) { - $text = str_replace('&', '&', $text); - } else { - # Ampersand-encoding based entirely on Nat Irons's Amputator - # MT plugin: - $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/', - '&', $text);; - } - # Encode remaining <'s - $text = str_replace('<', '<', $text); - - return $text; - } - - - protected function doAutoLinks($text) { - $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i', - array(&$this, '_doAutoLinks_url_callback'), $text); - - # Email addresses: - $text = preg_replace_callback('{ - < - (?:mailto:)? - ( - (?: - [-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+ - | - ".*?" - ) - \@ - (?: - [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+ - | - \[[\d.a-fA-F:]+\] # IPv4 & IPv6 - ) - ) - > - }xi', - array(&$this, '_doAutoLinks_email_callback'), $text); - - return $text; - } - protected function _doAutoLinks_url_callback($matches) { - $url = $this->encodeAttribute($matches[1]); - $link = "$url"; - return $this->hashPart($link); - } - protected function _doAutoLinks_email_callback($matches) { - $address = $matches[1]; - $link = $this->encodeEmailAddress($address); - return $this->hashPart($link); - } - - - protected function encodeEmailAddress($addr) { - # - # Input: an email address, e.g. "foo@example.com" - # - # Output: the email address as a mailto link, with each character - # of the address encoded as either a decimal or hex entity, in - # the hopes of foiling most address harvesting spam bots. E.g.: - # - #

    foo@exampl - # e.com

    - # - # Based by a filter by Matthew Wickline, posted to BBEdit-Talk. - # With some optimizations by Milian Wolff. - # - $addr = "mailto:" . $addr; - $chars = preg_split('/(? $char) { - $ord = ord($char); - # Ignore non-ascii chars. - if ($ord < 128) { - $r = ($seed * (1 + $key)) % 100; # Pseudo-random function. - # roughly 10% raw, 45% hex, 45% dec - # '@' *must* be encoded. I insist. - if ($r > 90 && $char != '@') /* do nothing */; - else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';'; - else $chars[$key] = '&#'.$ord.';'; - } - } - - $addr = implode('', $chars); - $text = implode('', array_slice($chars, 7)); # text without `mailto:` - $addr = "$text"; - - return $addr; - } - - - protected function parseSpan($str) { - # - # Take the string $str and parse it into tokens, hashing embeded HTML, - # escaped characters and handling code spans. - # - $output = ''; - - $span_re = '{ - ( - \\\\'.$this->escape_chars_re.' - | - (?no_markup ? '' : ' - | - # comment - | - <\?.*?\?> | <%.*?%> # processing instruction - | - <[!$]?[-a-zA-Z0-9:_]+ # regular tags - (?> - \s - (?>[^"\'>]+|"[^"]*"|\'[^\']*\')* - )? - > - | - <[-a-zA-Z0-9:_]+\s*/> # xml-style empty tag - | - # closing tag - ').' - ) - }xs'; - - while (1) { - # - # Each loop iteration seach for either the next tag, the next - # openning code span marker, or the next escaped character. - # Each token is then passed to handleSpanToken. - # - $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE); - - # Create token from text preceding tag. - if ($parts[0] != "") { - $output .= $parts[0]; - } - - # Check if we reach the end. - if (isset($parts[1])) { - $output .= $this->handleSpanToken($parts[1], $parts[2]); - $str = $parts[2]; - } - else { - break; - } - } - - return $output; - } - - - protected function handleSpanToken($token, &$str) { - # - # Handle $token provided by parseSpan by determining its nature and - # returning the corresponding value that should replace it. - # - switch ($token{0}) { - case "\\": - return $this->hashPart("&#". ord($token{1}). ";"); - case "`": - # Search for end marker in remaining text. - if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm', - $str, $matches)) - { - $str = $matches[2]; - $codespan = $this->makeCodeSpan($matches[1]); - return $this->hashPart($codespan); - } - return $token; // return as text since no ending marker found. - default: - return $this->hashPart($token); - } - } - - - protected function outdent($text) { - # - # Remove one level of line-leading tabs or spaces - # - return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text); - } - - - # String length function for detab. `_initDetab` will create a function to - # hanlde UTF-8 if the default function does not exist. - protected $utf8_strlen = 'mb_strlen'; - - protected function detab($text) { - # - # Replace tabs with the appropriate amount of space. - # - # For each line we separate the line in blocks delemited by - # tab characters. Then we reconstruct every line by adding the - # appropriate number of space between each blocks. - - $text = preg_replace_callback('/^.*\t.*$/m', - array(&$this, '_detab_callback'), $text); - - return $text; - } - protected function _detab_callback($matches) { - $line = $matches[0]; - $strlen = $this->utf8_strlen; # strlen function for UTF-8. - - # Split in blocks. - $blocks = explode("\t", $line); - # Add each blocks to the line. - $line = $blocks[0]; - unset($blocks[0]); # Do not add first block twice. - foreach ($blocks as $block) { - # Calculate amount of space, insert spaces, insert block. - $amount = $this->tab_width - - $strlen($line, 'UTF-8') % $this->tab_width; - $line .= str_repeat(" ", $amount) . $block; - } - return $line; - } - protected function _initDetab() { - # - # Check for the availability of the function in the `utf8_strlen` property - # (initially `mb_strlen`). If the function is not available, create a - # function that will loosely count the number of UTF-8 characters with a - # regular expression. - # - if (function_exists($this->utf8_strlen)) return; - $this->utf8_strlen = create_function('$text', 'return preg_match_all( - "/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/", - $text, $m);'); - } - - - protected function unhash($text) { - # - # Swap back in all the tags hashed by _HashHTMLBlocks. - # - return preg_replace_callback('/(.)\x1A[0-9]+\1/', - array(&$this, '_unhash_callback'), $text); - } - protected function _unhash_callback($matches) { - return $this->html_hashes[$matches[0]]; - } - -} - - -# -# Temporary Markdown Extra Parser Implementation Class -# -# NOTE: DON'T USE THIS CLASS -# Currently the implementation of of Extra resides here in this temporary class. -# This makes it easier to propagate the changes between the three different -# packaging styles of PHP Markdown. When this issue is resolved, this -# MarkdownExtra_TmpImpl class here will disappear and \Michelf\MarkdownExtra -# will contain the code. So please use \Michelf\MarkdownExtra and ignore this -# one. -# - -class _MarkdownExtra_TmpImpl extends \Michelf\Markdown { - - ### Configuration Variables ### - - # Prefix for footnote ids. - public $fn_id_prefix = ""; - - # Optional title attribute for footnote links and backlinks. - public $fn_link_title = ""; - public $fn_backlink_title = ""; - - # Optional class attribute for footnote links and backlinks. - public $fn_link_class = "footnote-ref"; - public $fn_backlink_class = "footnote-backref"; - - # Class name for table cell alignment (%% replaced left/center/right) - # For instance: 'go-%%' becomes 'go-left' or 'go-right' or 'go-center' - # If empty, the align attribute is used instead of a class name. - public $table_align_class_tmpl = ''; - - # Optional class prefix for fenced code block. - public $code_class_prefix = ""; - # Class attribute for code blocks goes on the `code` tag; - # setting this to true will put attributes on the `pre` tag instead. - public $code_attr_on_pre = false; - - # Predefined abbreviations. - public $predef_abbr = array(); - - - ### Parser Implementation ### - - public function __construct() { - # - # Constructor function. Initialize the parser object. - # - # Add extra escapable characters before parent constructor - # initialize the table. - $this->escape_chars .= ':|'; - - # Insert extra document, block, and span transformations. - # Parent constructor will do the sorting. - $this->document_gamut += array( - "doFencedCodeBlocks" => 5, - "stripFootnotes" => 15, - "stripAbbreviations" => 25, - "appendFootnotes" => 50, - ); - $this->block_gamut += array( - "doFencedCodeBlocks" => 5, - "doTables" => 15, - "doDefLists" => 45, - ); - $this->span_gamut += array( - "doFootnotes" => 5, - "doAbbreviations" => 70, - ); - - parent::__construct(); - } - - - # Extra variables used during extra transformations. - protected $footnotes = array(); - protected $footnotes_ordered = array(); - protected $footnotes_ref_count = array(); - protected $footnotes_numbers = array(); - protected $abbr_desciptions = array(); - protected $abbr_word_re = ''; - - # Give the current footnote number. - protected $footnote_counter = 1; - - - protected function setup() { - # - # Setting up Extra-specific variables. - # - parent::setup(); - - $this->footnotes = array(); - $this->footnotes_ordered = array(); - $this->footnotes_ref_count = array(); - $this->footnotes_numbers = array(); - $this->abbr_desciptions = array(); - $this->abbr_word_re = ''; - $this->footnote_counter = 1; - - foreach ($this->predef_abbr as $abbr_word => $abbr_desc) { - if ($this->abbr_word_re) - $this->abbr_word_re .= '|'; - $this->abbr_word_re .= preg_quote($abbr_word); - $this->abbr_desciptions[$abbr_word] = trim($abbr_desc); - } - } - - protected function teardown() { - # - # Clearing Extra-specific variables. - # - $this->footnotes = array(); - $this->footnotes_ordered = array(); - $this->footnotes_ref_count = array(); - $this->footnotes_numbers = array(); - $this->abbr_desciptions = array(); - $this->abbr_word_re = ''; - - parent::teardown(); - } - - - ### Extra Attribute Parser ### - - # Expression to use to catch attributes (includes the braces) - protected $id_class_attr_catch_re = '\{((?:[ ]*[#.][-_:a-zA-Z0-9]+){1,})[ ]*\}'; - # Expression to use when parsing in a context when no capture is desired - protected $id_class_attr_nocatch_re = '\{(?:[ ]*[#.][-_:a-zA-Z0-9]+){1,}[ ]*\}'; - - protected function doExtraAttributes($tag_name, $attr) { - # - # Parse attributes caught by the $this->id_class_attr_catch_re expression - # and return the HTML-formatted list of attributes. - # - # Currently supported attributes are .class and #id. - # - if (empty($attr)) return ""; - - # Split on components - preg_match_all('/[#.][-_:a-zA-Z0-9]+/', $attr, $matches); - $elements = $matches[0]; - - # handle classes and ids (only first id taken into account) - $classes = array(); - $id = false; - foreach ($elements as $element) { - if ($element{0} == '.') { - $classes[] = substr($element, 1); - } else if ($element{0} == '#') { - if ($id === false) $id = substr($element, 1); - } - } - - # compose attributes as string - $attr_str = ""; - if (!empty($id)) { - $attr_str .= ' id="'.$id.'"'; - } - if (!empty($classes)) { - $attr_str .= ' class="'.implode(" ", $classes).'"'; - } - return $attr_str; - } - - - protected function stripLinkDefinitions($text) { - # - # Strips link definitions from text, stores the URLs and titles in - # hash references. - # - $less_than_tab = $this->tab_width - 1; - - # Link defs are in the form: ^[id]: url "optional title" - $text = preg_replace_callback('{ - ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1 - [ ]* - \n? # maybe *one* newline - [ ]* - (?: - <(.+?)> # url = $2 - | - (\S+?) # url = $3 - ) - [ ]* - \n? # maybe one newline - [ ]* - (?: - (?<=\s) # lookbehind for whitespace - ["(] - (.*?) # title = $4 - [")] - [ ]* - )? # title is optional - (?:[ ]* '.$this->id_class_attr_catch_re.' )? # $5 = extra id & class attr - (?:\n+|\Z) - }xm', - array(&$this, '_stripLinkDefinitions_callback'), - $text); - return $text; - } - protected function _stripLinkDefinitions_callback($matches) { - $link_id = strtolower($matches[1]); - $url = $matches[2] == '' ? $matches[3] : $matches[2]; - $this->urls[$link_id] = $url; - $this->titles[$link_id] =& $matches[4]; - $this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy =& $matches[5]); - return ''; # String that will replace the block - } - - - ### HTML Block Parser ### - - # Tags that are always treated as block tags: - protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption'; - - # Tags treated as block tags only if the opening tag is alone on its line: - protected $context_block_tags_re = 'script|noscript|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video'; - - # Tags where markdown="1" default to span mode: - protected $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address'; - - # Tags which must not have their contents modified, no matter where - # they appear: - protected $clean_tags_re = 'script|math|svg'; - - # Tags that do not need to be closed. - protected $auto_close_tags_re = 'hr|img|param|source|track'; - - - protected function hashHTMLBlocks($text) { - # - # Hashify HTML Blocks and "clean tags". - # - # We only want to do this for block-level HTML tags, such as headers, - # lists, and tables. That's because we still want to wrap

    s around - # "paragraphs" that are wrapped in non-block-level tags, such as anchors, - # phrase emphasis, and spans. The list of tags we're looking for is - # hard-coded. - # - # This works by calling _HashHTMLBlocks_InMarkdown, which then calls - # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1" - # attribute is found within a tag, _HashHTMLBlocks_InHTML calls back - # _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag. - # These two functions are calling each other. It's recursive! - # - if ($this->no_markup) return $text; - - # - # Call the HTML-in-Markdown hasher. - # - list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text); - - return $text; - } - protected function _hashHTMLBlocks_inMarkdown($text, $indent = 0, - $enclosing_tag_re = '', $span = false) - { - # - # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags. - # - # * $indent is the number of space to be ignored when checking for code - # blocks. This is important because if we don't take the indent into - # account, something like this (which looks right) won't work as expected: - # - #

    - #
    - # Hello World. <-- Is this a Markdown code block or text? - #
    <-- Is this a Markdown code block or a real tag? - #
    - # - # If you don't like this, just don't indent the tag on which - # you apply the markdown="1" attribute. - # - # * If $enclosing_tag_re is not empty, stops at the first unmatched closing - # tag with that name. Nested tags supported. - # - # * If $span is true, text inside must treated as span. So any double - # newline will be replaced by a single newline so that it does not create - # paragraphs. - # - # Returns an array of that form: ( processed text , remaining text ) - # - if ($text === '') return array('', ''); - - # Regex to check for the presense of newlines around a block tag. - $newline_before_re = '/(?:^\n?|\n\n)*$/'; - $newline_after_re = - '{ - ^ # Start of text following the tag. - (?>[ ]*)? # Optional comment. - [ ]*\n # Must be followed by newline. - }xs'; - - # Regex to match any tag. - $block_tag_re = - '{ - ( # $2: Capture whole tag. - # Tag name. - '.$this->block_tags_re.' | - '.$this->context_block_tags_re.' | - '.$this->clean_tags_re.' | - (?!\s)'.$enclosing_tag_re.' - ) - (?: - (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name. - (?> - ".*?" | # Double quotes (can contain `>`) - \'.*?\' | # Single quotes (can contain `>`) - .+? # Anything but quotes and `>`. - )*? - )? - > # End of tag. - | - # HTML Comment - | - <\?.*?\?> | <%.*?%> # Processing instruction - | - # CData Block - | - # Code span marker - `+ - '. ( !$span ? ' # If not in span. - | - # Indented code block - (?: ^[ ]*\n | ^ | \n[ ]*\n ) - [ ]{'.($indent+4).'}[^\n]* \n - (?> - (?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n - )* - | - # Fenced code block marker - (?<= ^ | \n ) - [ ]{0,'.($indent+3).'}~{3,} - [ ]* - (?: - \.?[-_:a-zA-Z0-9]+ # standalone class name - | - '.$this->id_class_attr_nocatch_re.' # extra attributes - )? - [ ]* - \n - ' : '' ). ' # End (if not is span). - ) - }xs'; - - - $depth = 0; # Current depth inside the tag tree. - $parsed = ""; # Parsed text that will be returned. - - # - # Loop through every tag until we find the closing tag of the parent - # or loop until reaching the end of text if no parent tag specified. - # - do { - # - # Split the text using the first $tag_match pattern found. - # Text before pattern will be first in the array, text after - # pattern will be at the end, and between will be any catches made - # by the pattern. - # - $parts = preg_split($block_tag_re, $text, 2, - PREG_SPLIT_DELIM_CAPTURE); - - # If in Markdown span mode, add a empty-string span-level hash - # after each newline to prevent triggering any block element. - if ($span) { - $void = $this->hashPart("", ':'); - $newline = "$void\n"; - $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void; - } - - $parsed .= $parts[0]; # Text before current tag. - - # If end of $text has been reached. Stop loop. - if (count($parts) < 3) { - $text = ""; - break; - } - - $tag = $parts[1]; # Tag to handle. - $text = $parts[2]; # Remaining text after current tag. - $tag_re = preg_quote($tag); # For use in a regular expression. - - # - # Check for: Code span marker - # - if ($tag{0} == "`") { - # Find corresponding end marker. - $tag_re = preg_quote($tag); - if (preg_match('{^(?>.+?|\n(?!\n))*?(?.*\n)*?[ ]{'.($fence_indent).'}'.$fence_re.'[ ]*(?:\n|$)}', $text, - $matches)) - { - # End marker found: pass text unchanged until marker. - $parsed .= $tag . $matches[0]; - $text = substr($text, strlen($matches[0])); - } - else { - # No end marker: just skip it. - $parsed .= $tag; - } - } - # - # Check for: Indented code block. - # - else if ($tag{0} == "\n" || $tag{0} == " ") { - # Indented code block: pass it unchanged, will be handled - # later. - $parsed .= $tag; - } - # - # Check for: Opening Block level tag or - # Opening Context Block tag (like ins and del) - # used as a block tag (tag is alone on it's line). - # - else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) || - ( preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) && - preg_match($newline_before_re, $parsed) && - preg_match($newline_after_re, $text) ) - ) - { - # Need to parse tag and following text using the HTML parser. - list($block_text, $text) = - $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true); - - # Make sure it stays outside of any paragraph by adding newlines. - $parsed .= "\n\n$block_text\n\n"; - } - # - # Check for: Clean tag (like script, math) - # HTML Comments, processing instructions. - # - else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) || - $tag{1} == '!' || $tag{1} == '?') - { - # Need to parse tag and following text using the HTML parser. - # (don't check for markdown attribute) - list($block_text, $text) = - $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false); - - $parsed .= $block_text; - } - # - # Check for: Tag with same name as enclosing tag. - # - else if ($enclosing_tag_re !== '' && - # Same name as enclosing tag. - preg_match('{^= 0); - - return array($parsed, $text); - } - protected function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) { - # - # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags. - # - # * Calls $hash_method to convert any blocks. - # * Stops when the first opening tag closes. - # * $md_attr indicate if the use of the `markdown="1"` attribute is allowed. - # (it is not inside clean tags) - # - # Returns an array of that form: ( processed text , remaining text ) - # - if ($text === '') return array('', ''); - - # Regex to match `markdown` attribute inside of a tag. - $markdown_attr_re = ' - { - \s* # Eat whitespace before the `markdown` attribute - markdown - \s*=\s* - (?> - (["\']) # $1: quote delimiter - (.*?) # $2: attribute value - \1 # matching delimiter - | - ([^\s>]*) # $3: unquoted attribute value - ) - () # $4: make $3 always defined (avoid warnings) - }xs'; - - # Regex to match any tag. - $tag_re = '{ - ( # $2: Capture whole tag. - - ".*?" | # Double quotes (can contain `>`) - \'.*?\' | # Single quotes (can contain `>`) - .+? # Anything but quotes and `>`. - )*? - )? - > # End of tag. - | - # HTML Comment - | - <\?.*?\?> | <%.*?%> # Processing instruction - | - # CData Block - ) - }xs'; - - $original_text = $text; # Save original text in case of faliure. - - $depth = 0; # Current depth inside the tag tree. - $block_text = ""; # Temporary text holder for current text. - $parsed = ""; # Parsed text that will be returned. - - # - # Get the name of the starting tag. - # (This pattern makes $base_tag_name_re safe without quoting.) - # - if (preg_match('/^<([\w:$]*)\b/', $text, $matches)) - $base_tag_name_re = $matches[1]; - - # - # Loop through every tag until we find the corresponding closing tag. - # - do { - # - # Split the text using the first $tag_match pattern found. - # Text before pattern will be first in the array, text after - # pattern will be at the end, and between will be any catches made - # by the pattern. - # - $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE); - - if (count($parts) < 3) { - # - # End of $text reached with unbalenced tag(s). - # In that case, we return original text unchanged and pass the - # first character as filtered to prevent an infinite loop in the - # parent function. - # - return array($original_text{0}, substr($original_text, 1)); - } - - $block_text .= $parts[0]; # Text before current tag. - $tag = $parts[1]; # Tag to handle. - $text = $parts[2]; # Remaining text after current tag. - - # - # Check for: Auto-close tag (like
    ) - # Comments and Processing Instructions. - # - if (preg_match('{^auto_close_tags_re.')\b}', $tag) || - $tag{1} == '!' || $tag{1} == '?') - { - # Just add the tag to the block as if it was text. - $block_text .= $tag; - } - else { - # - # Increase/decrease nested tag count. Only do so if - # the tag's name match base tag's. - # - if (preg_match('{^mode = $attr_m[2] . $attr_m[3]; - $span_mode = $this->mode == 'span' || $this->mode != 'block' && - preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag); - - # Calculate indent before tag. - if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) { - $strlen = $this->utf8_strlen; - $indent = $strlen($matches[1], 'UTF-8'); - } else { - $indent = 0; - } - - # End preceding block with this tag. - $block_text .= $tag; - $parsed .= $this->$hash_method($block_text); - - # Get enclosing tag name for the ParseMarkdown function. - # (This pattern makes $tag_name_re safe without quoting.) - preg_match('/^<([\w:$]*)\b/', $tag, $matches); - $tag_name_re = $matches[1]; - - # Parse the content using the HTML-in-Markdown parser. - list ($block_text, $text) - = $this->_hashHTMLBlocks_inMarkdown($text, $indent, - $tag_name_re, $span_mode); - - # Outdent markdown text. - if ($indent > 0) { - $block_text = preg_replace("/^[ ]{1,$indent}/m", "", - $block_text); - } - - # Append tag content to parsed text. - if (!$span_mode) $parsed .= "\n\n$block_text\n\n"; - else $parsed .= "$block_text"; - - # Start over with a new block. - $block_text = ""; - } - else $block_text .= $tag; - } - - } while ($depth > 0); - - # - # Hash last block text that wasn't processed inside the loop. - # - $parsed .= $this->$hash_method($block_text); - - return array($parsed, $text); - } - - - protected function hashClean($text) { - # - # Called whenever a tag must be hashed when a function inserts a "clean" tag - # in $text, it passes through this function and is automaticaly escaped, - # blocking invalid nested overlap. - # - return $this->hashPart($text, 'C'); - } - - - protected function doAnchors($text) { - # - # Turn Markdown link shortcuts into XHTML tags. - # - if ($this->in_anchor) return $text; - $this->in_anchor = true; - - # - # First, handle reference-style links: [link text] [id] - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ('.$this->nested_brackets_re.') # link text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - ) - }xs', - array(&$this, '_doAnchors_reference_callback'), $text); - - # - # Next, inline-style links: [link text](url "optional title") - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ('.$this->nested_brackets_re.') # link text = $2 - \] - \( # literal paren - [ \n]* - (?: - <(.+?)> # href = $3 - | - ('.$this->nested_url_parenthesis_re.') # href = $4 - ) - [ \n]* - ( # $5 - ([\'"]) # quote char = $6 - (.*?) # Title = $7 - \6 # matching quote - [ \n]* # ignore any spaces/tabs between closing quote and ) - )? # title is optional - \) - (?:[ ]? '.$this->id_class_attr_catch_re.' )? # $8 = id/class attributes - ) - }xs', - array(&$this, '_doAnchors_inline_callback'), $text); - - # - # Last, handle reference-style shortcuts: [link text] - # These must come last in case you've also got [link text][1] - # or [link text](/foo) - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - \[ - ([^\[\]]+) # link text = $2; can\'t contain [ or ] - \] - ) - }xs', - array(&$this, '_doAnchors_reference_callback'), $text); - - $this->in_anchor = false; - return $text; - } - protected function _doAnchors_reference_callback($matches) { - $whole_match = $matches[1]; - $link_text = $matches[2]; - $link_id =& $matches[3]; - - if ($link_id == "") { - # for shortcut links like [this][] or [this]. - $link_id = $link_text; - } - - # lower-case and turn embedded newlines into spaces - $link_id = strtolower($link_id); - $link_id = preg_replace('{[ ]?\n}', ' ', $link_id); - - if (isset($this->urls[$link_id])) { - $url = $this->urls[$link_id]; - $url = $this->encodeAttribute($url); - - $result = "titles[$link_id] ) ) { - $title = $this->titles[$link_id]; - $title = $this->encodeAttribute($title); - $result .= " title=\"$title\""; - } - if (isset($this->ref_attr[$link_id])) - $result .= $this->ref_attr[$link_id]; - - $link_text = $this->runSpanGamut($link_text); - $result .= ">$link_text"; - $result = $this->hashPart($result); - } - else { - $result = $whole_match; - } - return $result; - } - protected function _doAnchors_inline_callback($matches) { - $whole_match = $matches[1]; - $link_text = $this->runSpanGamut($matches[2]); - $url = $matches[3] == '' ? $matches[4] : $matches[3]; - $title =& $matches[7]; - $attr = $this->doExtraAttributes("a", $dummy =& $matches[8]); - - - $url = $this->encodeAttribute($url); - - $result = "encodeAttribute($title); - $result .= " title=\"$title\""; - } - $result .= $attr; - - $link_text = $this->runSpanGamut($link_text); - $result .= ">$link_text"; - - return $this->hashPart($result); - } - - - protected function doImages($text) { - # - # Turn Markdown image shortcuts into tags. - # - # - # First, handle reference-style labeled images: ![alt text][id] - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - !\[ - ('.$this->nested_brackets_re.') # alt text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - - ) - }xs', - array(&$this, '_doImages_reference_callback'), $text); - - # - # Next, handle inline images: ![alt text](url "optional title") - # Don't forget: encode * and _ - # - $text = preg_replace_callback('{ - ( # wrap whole match in $1 - !\[ - ('.$this->nested_brackets_re.') # alt text = $2 - \] - \s? # One optional whitespace character - \( # literal paren - [ \n]* - (?: - <(\S*)> # src url = $3 - | - ('.$this->nested_url_parenthesis_re.') # src url = $4 - ) - [ \n]* - ( # $5 - ([\'"]) # quote char = $6 - (.*?) # title = $7 - \6 # matching quote - [ \n]* - )? # title is optional - \) - (?:[ ]? '.$this->id_class_attr_catch_re.' )? # $8 = id/class attributes - ) - }xs', - array(&$this, '_doImages_inline_callback'), $text); - - return $text; - } - protected function _doImages_reference_callback($matches) { - $whole_match = $matches[1]; - $alt_text = $matches[2]; - $link_id = strtolower($matches[3]); - - if ($link_id == "") { - $link_id = strtolower($alt_text); # for shortcut links like ![this][]. - } - - $alt_text = $this->encodeAttribute($alt_text); - if (isset($this->urls[$link_id])) { - $url = $this->encodeAttribute($this->urls[$link_id]); - $result = "\"$alt_text\"";titles[$link_id])) { - $title = $this->titles[$link_id]; - $title = $this->encodeAttribute($title); - $result .= " title=\"$title\""; - } - if (isset($this->ref_attr[$link_id])) - $result .= $this->ref_attr[$link_id]; - $result .= $this->empty_element_suffix; - $result = $this->hashPart($result); - } - else { - # If there's no such link ID, leave intact: - $result = $whole_match; - } - - return $result; - } - protected function _doImages_inline_callback($matches) { - $whole_match = $matches[1]; - $alt_text = $matches[2]; - $url = $matches[3] == '' ? $matches[4] : $matches[3]; - $title =& $matches[7]; - $attr = $this->doExtraAttributes("img", $dummy =& $matches[8]); - - $alt_text = $this->encodeAttribute($alt_text); - $url = $this->encodeAttribute($url); - $result = "\"$alt_text\"";encodeAttribute($title); - $result .= " title=\"$title\""; # $title already quoted - } - $result .= $attr; - $result .= $this->empty_element_suffix; - - return $this->hashPart($result); - } - - - protected function doHeaders($text) { - # - # Redefined to add id and class attribute support. - # - # Setext-style headers: - # Header 1 {#header1} - # ======== - # - # Header 2 {#header2 .class1 .class2} - # -------- - # - $text = preg_replace_callback( - '{ - (^.+?) # $1: Header text - (?:[ ]+ '.$this->id_class_attr_catch_re.' )? # $3 = id/class attributes - [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer - }mx', - array(&$this, '_doHeaders_callback_setext'), $text); - - # atx-style headers: - # # Header 1 {#header1} - # ## Header 2 {#header2} - # ## Header 2 with closing hashes ## {#header3.class1.class2} - # ... - # ###### Header 6 {.class2} - # - $text = preg_replace_callback('{ - ^(\#{1,6}) # $1 = string of #\'s - [ ]* - (.+?) # $2 = Header text - [ ]* - \#* # optional closing #\'s (not counted) - (?:[ ]+ '.$this->id_class_attr_catch_re.' )? # $3 = id/class attributes - [ ]* - \n+ - }xm', - array(&$this, '_doHeaders_callback_atx'), $text); - - return $text; - } - protected function _doHeaders_callback_setext($matches) { - if ($matches[3] == '-' && preg_match('{^- }', $matches[1])) - return $matches[0]; - $level = $matches[3]{0} == '=' ? 1 : 2; - $attr = $this->doExtraAttributes("h$level", $dummy =& $matches[2]); - $block = "".$this->runSpanGamut($matches[1]).""; - return "\n" . $this->hashBlock($block) . "\n\n"; - } - protected function _doHeaders_callback_atx($matches) { - $level = strlen($matches[1]); - $attr = $this->doExtraAttributes("h$level", $dummy =& $matches[3]); - $block = "".$this->runSpanGamut($matches[2]).""; - return "\n" . $this->hashBlock($block) . "\n\n"; - } - - - protected function doTables($text) { - # - # Form HTML tables. - # - $less_than_tab = $this->tab_width - 1; - # - # Find tables with leading pipe. - # - # | Header 1 | Header 2 - # | -------- | -------- - # | Cell 1 | Cell 2 - # | Cell 3 | Cell 4 - # - $text = preg_replace_callback(' - { - ^ # Start of a line - [ ]{0,'.$less_than_tab.'} # Allowed whitespace. - [|] # Optional leading pipe (present) - (.+) \n # $1: Header row (at least one pipe) - - [ ]{0,'.$less_than_tab.'} # Allowed whitespace. - [|] ([ ]*[-:]+[-| :]*) \n # $2: Header underline - - ( # $3: Cells - (?> - [ ]* # Allowed whitespace. - [|] .* \n # Row content. - )* - ) - (?=\n|\Z) # Stop at final double newline. - }xm', - array(&$this, '_doTable_leadingPipe_callback'), $text); - - # - # Find tables without leading pipe. - # - # Header 1 | Header 2 - # -------- | -------- - # Cell 1 | Cell 2 - # Cell 3 | Cell 4 - # - $text = preg_replace_callback(' - { - ^ # Start of a line - [ ]{0,'.$less_than_tab.'} # Allowed whitespace. - (\S.*[|].*) \n # $1: Header row (at least one pipe) - - [ ]{0,'.$less_than_tab.'} # Allowed whitespace. - ([-:]+[ ]*[|][-| :]*) \n # $2: Header underline - - ( # $3: Cells - (?> - .* [|] .* \n # Row content - )* - ) - (?=\n|\Z) # Stop at final double newline. - }xm', - array(&$this, '_DoTable_callback'), $text); - - return $text; - } - protected function _doTable_leadingPipe_callback($matches) { - $head = $matches[1]; - $underline = $matches[2]; - $content = $matches[3]; - - # Remove leading pipe for each row. - $content = preg_replace('/^ *[|]/m', '', $content); - - return $this->_doTable_callback(array($matches[0], $head, $underline, $content)); - } - protected function _doTable_makeAlignAttr($alignname) - { - if (empty($this->table_align_class_tmpl)) - return " align=\"$alignname\""; - - $classname = str_replace('%%', $alignname, $this->table_align_class_tmpl); - return " class=\"$classname\""; - } - protected function _doTable_callback($matches) { - $head = $matches[1]; - $underline = $matches[2]; - $content = $matches[3]; - - # Remove any tailing pipes for each line. - $head = preg_replace('/[|] *$/m', '', $head); - $underline = preg_replace('/[|] *$/m', '', $underline); - $content = preg_replace('/[|] *$/m', '', $content); - - # Reading alignement from header underline. - $separators = preg_split('/ *[|] */', $underline); - foreach ($separators as $n => $s) { - if (preg_match('/^ *-+: *$/', $s)) - $attr[$n] = $this->_doTable_makeAlignAttr('right'); - else if (preg_match('/^ *:-+: *$/', $s)) - $attr[$n] = $this->_doTable_makeAlignAttr('center'); - else if (preg_match('/^ *:-+ *$/', $s)) - $attr[$n] = $this->_doTable_makeAlignAttr('left'); - else - $attr[$n] = ''; - } - - # Parsing span elements, including code spans, character escapes, - # and inline HTML tags, so that pipes inside those gets ignored. - $head = $this->parseSpan($head); - $headers = preg_split('/ *[|] */', $head); - $col_count = count($headers); - $attr = array_pad($attr, $col_count, ''); - - # Write column headers. - $text = "\n"; - $text .= "\n"; - $text .= "\n"; - foreach ($headers as $n => $header) - $text .= " ".$this->runSpanGamut(trim($header))."\n"; - $text .= "\n"; - $text .= "\n"; - - # Split content by row. - $rows = explode("\n", trim($content, "\n")); - - $text .= "\n"; - foreach ($rows as $row) { - # Parsing span elements, including code spans, character escapes, - # and inline HTML tags, so that pipes inside those gets ignored. - $row = $this->parseSpan($row); - - # Split row by cell. - $row_cells = preg_split('/ *[|] */', $row, $col_count); - $row_cells = array_pad($row_cells, $col_count, ''); - - $text .= "\n"; - foreach ($row_cells as $n => $cell) - $text .= " ".$this->runSpanGamut(trim($cell))."\n"; - $text .= "\n"; - } - $text .= "\n"; - $text .= "
    "; - - return $this->hashBlock($text) . "\n"; - } - - - protected function doDefLists($text) { - # - # Form HTML definition lists. - # - $less_than_tab = $this->tab_width - 1; - - # Re-usable pattern to match any entire dl list: - $whole_list_re = '(?> - ( # $1 = whole list - ( # $2 - [ ]{0,'.$less_than_tab.'} - ((?>.*\S.*\n)+) # $3 = defined term - \n? - [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition - ) - (?s:.+?) - ( # $4 - \z - | - \n{2,} - (?=\S) - (?! # Negative lookahead for another term - [ ]{0,'.$less_than_tab.'} - (?: \S.*\n )+? # defined term - \n? - [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition - ) - (?! # Negative lookahead for another definition - [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition - ) - ) - ) - )'; // mx - - $text = preg_replace_callback('{ - (?>\A\n?|(?<=\n\n)) - '.$whole_list_re.' - }mx', - array(&$this, '_doDefLists_callback'), $text); - - return $text; - } - protected function _doDefLists_callback($matches) { - # Re-usable patterns to match list item bullets and number markers: - $list = $matches[1]; - - # Turn double returns into triple returns, so that we can make a - # paragraph for the last item in a list, if necessary: - $result = trim($this->processDefListItems($list)); - $result = "
    \n" . $result . "\n
    "; - return $this->hashBlock($result) . "\n\n"; - } - - - protected function processDefListItems($list_str) { - # - # Process the contents of a single definition list, splitting it - # into individual term and definition list items. - # - $less_than_tab = $this->tab_width - 1; - - # trim trailing blank lines: - $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str); - - # Process definition terms. - $list_str = preg_replace_callback('{ - (?>\A\n?|\n\n+) # leading line - ( # definition terms = $1 - [ ]{0,'.$less_than_tab.'} # leading whitespace - (?!\:[ ]|[ ]) # negative lookahead for a definition - # mark (colon) or more whitespace. - (?> \S.* \n)+? # actual term (not whitespace). - ) - (?=\n?[ ]{0,3}:[ ]) # lookahead for following line feed - # with a definition mark. - }xm', - array(&$this, '_processDefListItems_callback_dt'), $list_str); - - # Process actual definitions. - $list_str = preg_replace_callback('{ - \n(\n+)? # leading line = $1 - ( # marker space = $2 - [ ]{0,'.$less_than_tab.'} # whitespace before colon - \:[ ]+ # definition mark (colon) - ) - ((?s:.+?)) # definition text = $3 - (?= \n+ # stop at next definition mark, - (?: # next term or end of text - [ ]{0,'.$less_than_tab.'} \:[ ] | -
    | \z - ) - ) - }xm', - array(&$this, '_processDefListItems_callback_dd'), $list_str); - - return $list_str; - } - protected function _processDefListItems_callback_dt($matches) { - $terms = explode("\n", trim($matches[1])); - $text = ''; - foreach ($terms as $term) { - $term = $this->runSpanGamut(trim($term)); - $text .= "\n
    " . $term . "
    "; - } - return $text . "\n"; - } - protected function _processDefListItems_callback_dd($matches) { - $leading_line = $matches[1]; - $marker_space = $matches[2]; - $def = $matches[3]; - - if ($leading_line || preg_match('/\n{2,}/', $def)) { - # Replace marker with the appropriate whitespace indentation - $def = str_repeat(' ', strlen($marker_space)) . $def; - $def = $this->runBlockGamut($this->outdent($def . "\n\n")); - $def = "\n". $def ."\n"; - } - else { - $def = rtrim($def); - $def = $this->runSpanGamut($this->outdent($def)); - } - - return "\n
    " . $def . "
    \n"; - } - - - protected function doFencedCodeBlocks($text) { - # - # Adding the fenced code block syntax to regular Markdown: - # - # ~~~ - # Code block - # ~~~ - # - $less_than_tab = $this->tab_width; - - $text = preg_replace_callback('{ - (?:\n|\A) - # 1: Opening marker - ( - ~{3,} # Marker: three tilde or more. - ) - [ ]* - (?: - \.?([-_:a-zA-Z0-9]+) # 2: standalone class name - | - '.$this->id_class_attr_catch_re.' # 3: Extra attributes - )? - [ ]* \n # Whitespace and newline following marker. - - # 4: Content - ( - (?> - (?!\1 [ ]* \n) # Not a closing marker. - .*\n+ - )+ - ) - - # Closing marker. - \1 [ ]* \n - }xm', - array(&$this, '_doFencedCodeBlocks_callback'), $text); - - return $text; - } - protected function _doFencedCodeBlocks_callback($matches) { - $classname =& $matches[2]; - $attrs =& $matches[3]; - $codeblock = $matches[4]; - $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); - $codeblock = preg_replace_callback('/^\n+/', - array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock); - - if ($classname != "") { - if ($classname{0} == '.') - $classname = substr($classname, 1); - $attr_str = ' class="'.$this->code_class_prefix.$classname.'"'; - } else { - $attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs); - } - $pre_attr_str = $this->code_attr_on_pre ? $attr_str : ''; - $code_attr_str = $this->code_attr_on_pre ? '' : $attr_str; - $codeblock = "$codeblock
    "; - - return "\n\n".$this->hashBlock($codeblock)."\n\n"; - } - protected function _doFencedCodeBlocks_newlines($matches) { - return str_repeat("empty_element_suffix", - strlen($matches[0])); - } - - - # - # Redefining emphasis markers so that emphasis by underscore does not - # work in the middle of a word. - # - protected $em_relist = array( - '' => '(?:(? '(?<=\S|^)(? '(?<=\S|^)(? '(?:(? '(?<=\S|^)(? '(?<=\S|^)(? '(?:(? '(?<=\S|^)(? '(?<=\S|^)(? tags - # - # Strip leading and trailing lines: - $text = preg_replace('/\A\n+|\n+\z/', '', $text); - - $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY); - - # - # Wrap

    tags and unhashify HTML blocks - # - foreach ($grafs as $key => $value) { - $value = trim($this->runSpanGamut($value)); - - # Check if this should be enclosed in a paragraph. - # Clean tag hashes & block tag hashes are left alone. - $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value); - - if ($is_p) { - $value = "

    $value

    "; - } - $grafs[$key] = $value; - } - - # Join grafs in one text, then unhash HTML tags. - $text = implode("\n\n", $grafs); - - # Finish by removing any tag hashes still present in $text. - $text = $this->unhash($text); - - return $text; - } - - - ### Footnotes - - protected function stripFootnotes($text) { - # - # Strips link definitions from text, stores the URLs and titles in - # hash references. - # - $less_than_tab = $this->tab_width - 1; - - # Link defs are in the form: [^id]: url "optional title" - $text = preg_replace_callback('{ - ^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?: # note_id = $1 - [ ]* - \n? # maybe *one* newline - ( # text = $2 (no blank lines allowed) - (?: - .+ # actual text - | - \n # newlines but - (?!\[\^.+?\]:\s)# negative lookahead for footnote marker. - (?!\n+[ ]{0,3}\S)# ensure line is not blank and followed - # by non-indented content - )* - ) - }xm', - array(&$this, '_stripFootnotes_callback'), - $text); - return $text; - } - protected function _stripFootnotes_callback($matches) { - $note_id = $this->fn_id_prefix . $matches[1]; - $this->footnotes[$note_id] = $this->outdent($matches[2]); - return ''; # String that will replace the block - } - - - protected function doFootnotes($text) { - # - # Replace footnote references in $text [^id] with a special text-token - # which will be replaced by the actual footnote marker in appendFootnotes. - # - if (!$this->in_anchor) { - $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text); - } - return $text; - } - - - protected function appendFootnotes($text) { - # - # Append footnote list to text. - # - $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', - array(&$this, '_appendFootnotes_callback'), $text); - - if (!empty($this->footnotes_ordered)) { - $text .= "\n\n"; - $text .= "
    \n"; - $text .= "empty_element_suffix ."\n"; - $text .= "
      \n\n"; - - $attr = " rev=\"footnote\""; - if ($this->fn_backlink_class != "") { - $class = $this->fn_backlink_class; - $class = $this->encodeAttribute($class); - $attr .= " class=\"$class\""; - } - if ($this->fn_backlink_title != "") { - $title = $this->fn_backlink_title; - $title = $this->encodeAttribute($title); - $attr .= " title=\"$title\""; - } - $num = 0; - - while (!empty($this->footnotes_ordered)) { - $footnote = reset($this->footnotes_ordered); - $note_id = key($this->footnotes_ordered); - unset($this->footnotes_ordered[$note_id]); - $ref_count = $this->footnotes_ref_count[$note_id]; - unset($this->footnotes_ref_count[$note_id]); - unset($this->footnotes[$note_id]); - - $footnote .= "\n"; # Need to append newline before parsing. - $footnote = $this->runBlockGamut("$footnote\n"); - $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', - array(&$this, '_appendFootnotes_callback'), $footnote); - - $attr = str_replace("%%", ++$num, $attr); - $note_id = $this->encodeAttribute($note_id); - - # Prepare backlink, multiple backlinks if multiple references - $backlink = ""; - for ($ref_num = 2; $ref_num <= $ref_count; ++$ref_num) { - $backlink .= " "; - } - # Add backlink to last paragraph; create new paragraph if needed. - if (preg_match('{

      $}', $footnote)) { - $footnote = substr($footnote, 0, -4) . " $backlink

      "; - } else { - $footnote .= "\n\n

      $backlink

      "; - } - - $text .= "
    1. \n"; - $text .= $footnote . "\n"; - $text .= "
    2. \n\n"; - } - - $text .= "
    \n"; - $text .= "
    "; - } - return $text; - } - protected function _appendFootnotes_callback($matches) { - $node_id = $this->fn_id_prefix . $matches[1]; - - # Create footnote marker only if it has a corresponding footnote *and* - # the footnote hasn't been used by another marker. - if (isset($this->footnotes[$node_id])) { - $num =& $this->footnotes_numbers[$node_id]; - if (!isset($num)) { - # Transfer footnote content to the ordered list and give it its - # number - $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id]; - $this->footnotes_ref_count[$node_id] = 1; - $num = $this->footnote_counter++; - $ref_count_mark = ''; - } else { - $ref_count_mark = $this->footnotes_ref_count[$node_id] += 1; - } - - $attr = ""; - if ($this->fn_link_class != "") { - $class = $this->fn_link_class; - $class = $this->encodeAttribute($class); - $attr .= " class=\"$class\""; - } - if ($this->fn_link_title != "") { - $title = $this->fn_link_title; - $title = $this->encodeAttribute($title); - $attr .= " title=\"$title\""; - } - - $attr = str_replace("%%", $num, $attr); - $node_id = $this->encodeAttribute($node_id); - - return - "". - "$num". - ""; - } - - return "[^".$matches[1]."]"; - } - - - ### Abbreviations ### - - protected function stripAbbreviations($text) { - # - # Strips abbreviations from text, stores titles in hash references. - # - $less_than_tab = $this->tab_width - 1; - - # Link defs are in the form: [id]*: url "optional title" - $text = preg_replace_callback('{ - ^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?: # abbr_id = $1 - (.*) # text = $2 (no blank lines allowed) - }xm', - array(&$this, '_stripAbbreviations_callback'), - $text); - return $text; - } - protected function _stripAbbreviations_callback($matches) { - $abbr_word = $matches[1]; - $abbr_desc = $matches[2]; - if ($this->abbr_word_re) - $this->abbr_word_re .= '|'; - $this->abbr_word_re .= preg_quote($abbr_word); - $this->abbr_desciptions[$abbr_word] = trim($abbr_desc); - return ''; # String that will replace the block - } - - - protected function doAbbreviations($text) { - # - # Find defined abbreviations in text and wrap them in elements. - # - if ($this->abbr_word_re) { - // cannot use the /x modifier because abbr_word_re may - // contain significant spaces: - $text = preg_replace_callback('{'. - '(?abbr_word_re.')'. - '(?![\w\x1A])'. - '}', - array(&$this, '_doAbbreviations_callback'), $text); - } - return $text; - } - protected function _doAbbreviations_callback($matches) { - $abbr = $matches[0]; - if (isset($this->abbr_desciptions[$abbr])) { - $desc = $this->abbr_desciptions[$abbr]; - if (empty($desc)) { - return $this->hashPart("$abbr"); - } else { - $desc = $this->encodeAttribute($desc); - return $this->hashPart("$abbr"); - } - } else { - return $matches[0]; - } - } - -} - - -?> \ No newline at end of file diff --git a/lib/Michelf/MarkdownExtra.php b/lib/Michelf/MarkdownExtra.php deleted file mode 100644 index 267bf16..0000000 --- a/lib/Michelf/MarkdownExtra.php +++ /dev/null @@ -1,40 +0,0 @@ - -# -# Original Markdown -# Copyright (c) 2004-2006 John Gruber -# -# -namespace Michelf; - - -# Just force Michelf/Markdown.php to load. This is needed to load -# the temporary implementation class. See below for details. -\Michelf\Markdown::MARKDOWNLIB_VERSION; - -# -# Markdown Extra Parser Class -# -# Note: Currently the implementation resides in the temporary class -# \Michelf\MarkdownExtra_TmpImpl (in the same file as \Michelf\Markdown). -# This makes it easier to propagate the changes between the three different -# packaging styles of PHP Markdown. Once this issue is resolved, the -# _MarkdownExtra_TmpImpl will disappear and this one will contain the code. -# - -class MarkdownExtra extends \Michelf\_MarkdownExtra_TmpImpl { - - ### Parser Implementation ### - - # Temporarily, the implemenation is in the _MarkdownExtra_TmpImpl class. - # See note above. - -} - - -?> \ No newline at end of file diff --git a/lib/Michelf/extra/License.md b/lib/Michelf/extra/License.md deleted file mode 100644 index 027becb..0000000 --- a/lib/Michelf/extra/License.md +++ /dev/null @@ -1,36 +0,0 @@ -PHP Markdown Lib -Copyright (c) 2004-2013 Michel Fortin - -All rights reserved. - -Based on Markdown -Copyright (c) 2003-2006 John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/lib/Michelf/extra/Readme.md b/lib/Michelf/extra/Readme.md deleted file mode 100644 index 8ee5fae..0000000 --- a/lib/Michelf/extra/Readme.md +++ /dev/null @@ -1,259 +0,0 @@ -PHP Markdown -============ - -PHP Markdown Lib 1.3 - 11 Apr 2013 - -by Michel Fortin - - -based on Markdown by John Gruber - - - -Introduction ------------- - -This is a library package that includes the PHP Markdown parser and its -sibling PHP Markdown Extra which additional features. - -Markdown is a text-to-HTML conversion tool for web writers. Markdown -allows you to write using an easy-to-read, easy-to-write plain text -format, then convert it to structurally valid XHTML (or HTML). - -"Markdown" is two things: a plain text markup syntax, and a software -tool, written in Perl, that converts the plain text markup to HTML. -PHP Markdown is a port to PHP of the original Markdown program by -John Gruber. - -PHP Markdown can work as a plug-in for WordPress, as a modifier for -the Smarty templating engine, or as a replacement for Textile -formatting in any software that supports Textile. - -Full documentation of Markdown's syntax is available on John's -Markdown page: - - -Requirement ------------ - -This library package requires PHP 5.3 or later. - -Note: The older plugin/library hybrid package for PHP Markdown and -PHP Markdown Extra is still maintained and will work with PHP 4.0.5 and later. - -Before PHP 5.3.7, pcre.backtrack_limit defaults to 100 000, which is too small -in many situations. You might need to set it to higher values. Later PHP -releases defaults to 1 000 000, which is usually fine. - - -Usage ------ - -This library package is meant to be used with class autoloading. For autoloading -to work, your project needs have setup a PSR-0-compatible autoloader. See the -included Readme.php file for a minimal autoloader setup. (If you don't want to -use autoloading you can do a classic `require_once` to manually include the -files prior use instead.) - -With class autoloading in place, putting the 'Michelf' folder in your -include path should be enough for this to work: - - use \Michelf\Markdown; - $my_html = Markdown::defaultTransform($my_text); - -Markdown Extra syntax is also available the same way: - - use \Michelf\MarkdownExtra; - $my_html = MarkdownExtra::defaultTransform($my_text); - -If you wish to use PHP Markdown with another text filter function -built to parse HTML, you should filter the text *after* the `transform` -function call. This is an example with [PHP SmartyPants][psp]: - - use \Michelf\Markdown, \Michelf\SmartyPants; - $my_html = Markdown::defaultTransform($my_text); - $my_html = SmartyPants::defaultTransform($my_html); - -All these examples are using the static `defaultTransform` static function -found inside the parser class. If you want to customize the parser -configuration, you can also instantiate it directly and change some -configuration variables: - - use \Michelf\MarkdownExtra; - $parser = new MarkdownExtra; - $parser->fn_id_prefix = "post22-"; - $my_html = $parser->transform($my_text); - - -Usage ------ - -This library package is meant to be used with class autoloading. For autoloading -to work, your project needs have setup a PSR-0-compatible autoloader. See the -included Readme.php file for a minimal autoloader setup. (If you don't want to -use autoloading you can do a classic `require_once` to manually include the -files prior use instead.) - -With class autoloading in place, putting the 'Michelf' folder in your -include path should be enough for this to work: - - use \Michelf\Markdown; - $my_html = Markdown::defaultTransform($my_text); - -Markdown Extra syntax is also available the same way: - - use \Michelf\MarkdownExtra; - $my_html = MarkdownExtra::defaultTransform($my_text); - -If you wish to use PHP Markdown with another text filter function -built to parse HTML, you should filter the text *after* the `transform` -function call. This is an example with [PHP SmartyPants][psp]: - - use \Michelf\Markdown, \Michelf\SmartyPants; - $my_html = Markdown::defaultTransform($my_text); - $my_html = SmartyPants::defaultTransform($my_html); - -All these examples are using the static `defaultTransform` static function -found inside the parser class. If you want to customize the parser -configuration, you can also instantiate it directly and change some -configuration variables: - - use \Michelf\MarkdownExtra; - $parser = new MarkdownExtra; - $parser->fn_id_prefix = "post22-"; - $my_html = $parser->transform($my_text); - -To learn more, see the full list of [configuration variables]. - - [configuration variables]: http://michelf.ca/project/php-markdown/configuration/ - - -Public API and Versionning Policy ---------------------------------- - -Version numbers are of the form *major*.*minor*.*patch*. - -The public API of PHP Markdown consist of the two parser classes `Markdown` -and `MarkdownExtra`, their constructors, the `transform` and `defaultTransform` -functions and their configuration variables. The public API is stable for -a given major version number. It might get additions when the minor version -number increments. - -**Protected members are not considered public API.** This is unconventionnal -and deserves an explanation. Incrementing the major version number every time -the underlying implementation of something changes is going to give nonsential -version numbers for the vast majority of people who just use the parser. -Protected members are meant to create parser subclasses that behave in -different ways. Very few people create parser subclasses. I don't want to -discourage it by making everything private, but at the same time I can't -guarenty any stable hook between versions if you use protected members. - -**Syntax changes** will increment the minor number for new features, and the -patch number for small corrections. A *new feature* is something that needs a -change in the syntax documentation. Note that since PHP Markdown Lib includes -two parsers, a syntax change for either of them will increment the minor -number. Also note that there is nothigng perfectly backward-compatible with the -Markdown syntax: all inputs are always valid, so new features always replace -something that was previously legal, although generally non-sensial to do. - - -Bugs ----- - -To file bug reports please send email to: - - -Please include with your report: (1) the example input; (2) the output you -expected; (3) the output PHP Markdown actually produced. - -If you have a problem where Markdown gives you an empty result, first check -that the backtrack limit is not too low by running `php --info | grep pcre`. -See Installation and Requirement above for details. - - -Version History ---------------- - -PHP Markdown Lib 1.3 (11 Apr 2013): - -This is the first release of PHP Markdown Lib. This package requires PHP -version 4.3 or later and is designed to work with PSR-0 autoloading and, -optionally with Composer. Here is a list of the changes since -PHP Markdown Extra 1.2.6: - -* Plugin interface for Wordpress and other systems is no longer present in - the Lib package. The classic package is still available if you need it: - - -* Added `public` and `protected` protection attributes, plus a section about - what is "public API" and what isn't in the Readme file. - -* Changed HTML output for footnotes: now instead of adding `rel` and `rev` - attributes, footnotes links have the class name `footnote-ref` and - backlinks `footnote-backref`. - -* Fixed some regular expressions to make PCRE not shout warnings about POSIX - collation classes (dependent on your version of PCRE). - -* Added optional class and id attributes to images and links using the same - syntax as for headers: - - [link](url){#id .class} - ![img](url){#id .class} - - It work too for reference-style links and images. In this case you need - to put those attributes at the reference definition: - - [link][linkref] or [linkref] - ![img][linkref] - - [linkref]: url "optional title" {#id .class} - -* Fixed a PHP notice message triggered when some table column separator - markers are missing on the separator line below column headers. - -* Fixed a small mistake that could cause the parser to retain an invalid - state related to parsing links across multiple runs. This was never - observed (that I know of), but it's still worth fixing. - - -Copyright and License ---------------------- - -PHP Markdown Lib -Copyright (c) 2004-2013 Michel Fortin - -All rights reserved. - -Based on Markdown -Copyright (c) 2003-2005 John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the - distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/lib/Michelf/extra/Readme.php b/lib/Michelf/extra/Readme.php deleted file mode 100644 index 75e23e0..0000000 --- a/lib/Michelf/extra/Readme.php +++ /dev/null @@ -1,31 +0,0 @@ - - - - - PHP Markdown Lib - Readme - - - - - diff --git a/lib/Michelf/extra/composer.json b/lib/Michelf/extra/composer.json deleted file mode 100644 index 670fc96..0000000 --- a/lib/Michelf/extra/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "michelf/php-markdown", - "type": "library", - "description": "PHP Markdown", - "homepage": "http://michelf.ca/projects/php-markdown/", - "keywords": ["markdown"], - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "http://michelf.ca/", - "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "http://daringfireball.net/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-0": { "Michelf": "" } - }, - "extra": { - "branch-alias": { - "dev-lib": "1.3.x-dev" - } - } -} diff --git a/lib/autoload.inc.php b/lib/autoload.inc.php deleted file mode 100644 index 0057f5e..0000000 --- a/lib/autoload.inc.php +++ /dev/null @@ -1,2 +0,0 @@ -logged){ - return false;} //alrdy logged(this prevents proper thrown value for every system exception) - - \SYSTEM\DBD\SYS_LOG_INSERT::Q1( array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null, $thrown ? 1 : 0), - array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5),date('Y-m-d H:i:s', microtime(true)), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null,$thrown)); - if(\property_exists(get_class($E), 'logged')){ - $E->logged = true;} //we just did log - } catch (\Exception $E){return false;} //Error -> Ignore - - return false; //We just log and do not handle the error! - } -} \ No newline at end of file diff --git a/log/error_handler/error_handler_jsonoutput.php b/log/error_handler/error_handler_jsonoutput.php deleted file mode 100644 index 2058311..0000000 --- a/log/error_handler/error_handler_jsonoutput.php +++ /dev/null @@ -1,15 +0,0 @@ - Ignore - return die(); //die is required cuz else some fatals cant be catched properly - } - } -} \ No newline at end of file diff --git a/log/exceptions/COUNTER.php b/log/exceptions/COUNTER.php deleted file mode 100644 index 26dcfbd..0000000 --- a/log/exceptions/COUNTER.php +++ /dev/null @@ -1,5 +0,0 @@ - 0, 'status' => false, 'result' => $error); - header('Access-Control-Allow-Origin: *');//allow cross domain calls - header('content-type: application/json'); - return json_encode($result);} - return $bufferContent; - } -} - diff --git a/log/register_exception_shortcut.php b/log/register_exception_shortcut.php deleted file mode 100644 index 1e0f90e..0000000 --- a/log/register_exception_shortcut.php +++ /dev/null @@ -1,2 +0,0 @@ -getMessage(); - $error['code'] = $e->getCode(); - $error['file'] = $e->getFile(); - $error['line'] = $e->getLine(); - $error['trace'] = array_slice(explode('#', $e->getTraceAsString()), 1, -1); - - return self::toString($error, self::JSONRESULT_ERROR); - } - - //Returns OK status - public static function ok(){ - return self::toString(NULL);} -} \ No newline at end of file diff --git a/log/result_shortcut/JsonResult.php b/log/result_shortcut/JsonResult.php deleted file mode 100644 index 30dabf6..0000000 --- a/log/result_shortcut/JsonResult.php +++ /dev/null @@ -1,3 +0,0 @@ -next()){ - $row['url'] = \SYSTEM\PAGE\replace::replace($row['url'], $vars); - $row['url'] = \SYSTEM\PAGE\replace::clean($row['url']); - //clean url of empty variables - $row['url'] = preg_replace('/&.*?=(&|$)/', '&', $row['url']); - $row['url'] = preg_replace('/&$/', '', $row['url']); - $row['css'] = $row['js'] = array(); - if(\class_exists($row['php_class']) && \method_exists($row['php_class'], 'css') && \is_callable($row['php_class'].'::css')){ - $row['css'] = array_merge($row['css'], call_user_func($row['php_class'].'::css'));} - if(\class_exists($row['php_class']) && \method_exists($row['php_class'], 'js') && \is_callable($row['php_class'].'::js')){ - $row['js'] = array_merge($row['js'], call_user_func($row['php_class'].'::js'));} - $row['php_class'] = ''; - $result[] = $row; - } - return $returnasjson ? \SYSTEM\LOG\JsonResult::toString($result) : $result;} -} \ No newline at end of file diff --git a/page/autoload.inc.php b/page/autoload.inc.php deleted file mode 100644 index 33a05ec..0000000 --- a/page/autoload.inc.php +++ /dev/null @@ -1,2 +0,0 @@ -$value){ - if(!is_array($value)){ - $search[] = '/\${'.$key.'}/'; - $replace[] = $value;} - } - return @preg_replace($search, $replace, $text); - } - public static function replaceFile($path, $vars = array()){ - $buffer = file_get_contents($path); - return self::replace($buffer, $vars);} - - //removes all Variable Handles - public static function clean($text){ - return preg_replace('/\${.*?}/', '', $text);} -} \ No newline at end of file diff --git a/readme.md b/readme.md index ec83551..988953c 100644 --- a/readme.md +++ b/readme.md @@ -3,24 +3,6 @@ system System - PHP Framework -License -======= -Copyright (c) 2013-2014 Ulf Gebhardt +THIS REPOISTORY IS OUTDATED AND IS KEPT FOR COMPATIBILITY REASONS. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +Visit https://github.com/webcraftmedia/system for the latest Version! \ No newline at end of file diff --git a/sai/autoload.inc.php b/sai/autoload.inc.php deleted file mode 100644 index b7e18c5..0000000 --- a/sai/autoload.inc.php +++ /dev/null @@ -1,5 +0,0 @@ -> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } - - /* - * Bitwise rotate a 32-bit number to the left. - */ - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); - } - - /* - * These functions implement the four basic operations the algorithm uses. - */ - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); - } - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - - /* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - function binl_md5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i], 7, -680876936); - d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i], 20, -373897302); - a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5_hh(d, a, b, c, x[i], 11, -358537222); - c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i], 6, -198630844); - d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return [a, b, c, d]; - } - - /* - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, - output = ''; - for (i = 0; i < input.length * 32; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } - - /* - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - function rstr2binl(input) { - var i, - output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; - } - for (i = 0; i < input.length * 8; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); - } - return output; - } - - /* - * Calculate the MD5 of a raw string - */ - function rstr_md5(s) { - return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); - } - - /* - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ - function rstr_hmac_md5(key, data) { - var i, - bkey = rstr2binl(key), - ipad = [], - opad = [], - hash; - ipad[15] = opad[15] = undefined; - if (bkey.length > 16) { - bkey = binl_md5(bkey, key.length * 8); - } - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); - } - - /* - * Convert a raw string to a hex string - */ - function rstr2hex(input) { - var hex_tab = '0123456789abcdef', - output = '', - x, - i; - for (i = 0; i < input.length; i += 1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + - hex_tab.charAt(x & 0x0F); - } - return output; - } - - /* - * Encode a string as utf-8 - */ - function str2rstr_utf8(input) { - return unescape(encodeURIComponent(input)); - } - - /* - * Take string arguments and return either raw or hex encoded strings - */ - function raw_md5(s) { - return rstr_md5(str2rstr_utf8(s)); - } - function hex_md5(s) { - return rstr2hex(raw_md5(s)); - } - function raw_hmac_md5(k, d) { - return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)); - } - function hex_hmac_md5(k, d) { - return rstr2hex(raw_hmac_md5(k, d)); - } - - $.md5 = function (string, key, raw) { - if (!key) { - if (!raw) { - return hex_md5(string); - } else { - return raw_md5(string); - } - } - if (!raw) { - return hex_hmac_md5(key, string); - } else { - return raw_hmac_md5(key, string); - } - }; - -}(typeof jQuery === 'function' ? jQuery : this)); \ No newline at end of file diff --git a/sai/js/crypto/jquery.sha1.js b/sai/js/crypto/jquery.sha1.js deleted file mode 100644 index 40c5725..0000000 --- a/sai/js/crypto/jquery.sha1.js +++ /dev/null @@ -1,170 +0,0 @@ - -/** - * jQuery SHA1 hash algorithm function - * - * - * Calculate the sha1 hash of a String - * String $.sha1 ( String str ) - * - * - * Calculates the sha1 hash of str using the US Secure Hash Algorithm 1. - * SHA-1 the Secure Hash Algorithm (SHA) was developed by NIST and is specified in the Secure Hash Standard (SHS, FIPS 180). - * This script is used to process variable length message into a fixed-length output using the SHA-1 algorithm. It is fully compatible with UTF-8 encoding. - * If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). - * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin. - * - * Example - * Code - * - * $.sha1("I'm Persian."); - * - * Result - * - * "1d302f9dc925d62fc859055999d2052e274513ed" - * - * - * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > - * @link http://www.semnanweb.com/jquery-plugin/sha1.html - * @see http://www.webtoolkit.info/ - * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] - * @param {jQuery} {sha1:function(string)) - * @return string - */ - -(function($){ - - var rotateLeft = function(lValue, iShiftBits) { - return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); - } - - var lsbHex = function(value) { - var string = ""; - var i; - var vh; - var vl; - for(i = 0;i <= 6;i += 2) { - vh = (value>>>(i * 4 + 4))&0x0f; - vl = (value>>>(i*4))&0x0f; - string += vh.toString(16) + vl.toString(16); - } - return string; - }; - - var cvtHex = function(value) { - var string = ""; - var i; - var v; - for(i = 7;i >= 0;i--) { - v = (value>>>(i * 4))&0x0f; - string += v.toString(16); - } - return string; - }; - - var uTF8Encode = function(string) { - string = string.replace(/\x0d\x0a/g, "\x0a"); - var output = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - output += String.fromCharCode(c); - } else if ((c > 127) && (c < 2048)) { - output += String.fromCharCode((c >> 6) | 192); - output += String.fromCharCode((c & 63) | 128); - } else { - output += String.fromCharCode((c >> 12) | 224); - output += String.fromCharCode(((c >> 6) & 63) | 128); - output += String.fromCharCode((c & 63) | 128); - } - } - return output; - }; - - $.extend({ - sha1: function(string) { - var blockstart; - var i, j; - var W = new Array(80); - var H0 = 0x67452301; - var H1 = 0xEFCDAB89; - var H2 = 0x98BADCFE; - var H3 = 0x10325476; - var H4 = 0xC3D2E1F0; - var A, B, C, D, E; - var tempValue; - string = uTF8Encode(string); - var stringLength = string.length; - var wordArray = new Array(); - for(i = 0;i < stringLength - 3;i += 4) { - j = string.charCodeAt(i)<<24 | string.charCodeAt(i + 1)<<16 | string.charCodeAt(i + 2)<<8 | string.charCodeAt(i + 3); - wordArray.push(j); - } - switch(stringLength % 4) { - case 0: - i = 0x080000000; - break; - case 1: - i = string.charCodeAt(stringLength - 1)<<24 | 0x0800000; - break; - case 2: - i = string.charCodeAt(stringLength - 2)<<24 | string.charCodeAt(stringLength - 1)<<16 | 0x08000; - break; - case 3: - i = string.charCodeAt(stringLength - 3)<<24 | string.charCodeAt(stringLength - 2)<<16 | string.charCodeAt(stringLength - 1)<<8 | 0x80; - break; - } - wordArray.push(i); - while((wordArray.length % 16) != 14 ) wordArray.push(0); - wordArray.push(stringLength>>>29); - wordArray.push((stringLength<<3)&0x0ffffffff); - for(blockstart = 0;blockstart < wordArray.length;blockstart += 16) { - for(i = 0;i < 16;i++) W[i] = wordArray[blockstart+i]; - for(i = 16;i <= 79;i++) W[i] = rotateLeft(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); - A = H0; - B = H1; - C = H2; - D = H3; - E = H4; - for(i = 0;i <= 19;i++) { - tempValue = (rotateLeft(A, 5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; - E = D; - D = C; - C = rotateLeft(B, 30); - B = A; - A = tempValue; - } - for(i = 20;i <= 39;i++) { - tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; - E = D; - D = C; - C = rotateLeft(B, 30); - B = A; - A = tempValue; - } - for(i = 40;i <= 59;i++) { - tempValue = (rotateLeft(A, 5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; - E = D; - D = C; - C = rotateLeft(B, 30); - B = A; - A = tempValue; - } - for(i = 60;i <= 79;i++) { - tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; - E = D; - D = C; - C = rotateLeft(B, 30); - B = A; - A = tempValue; - } - H0 = (H0 + A) & 0x0ffffffff; - H1 = (H1 + B) & 0x0ffffffff; - H2 = (H2 + C) & 0x0ffffffff; - H3 = (H3 + D) & 0x0ffffffff; - H4 = (H4 + E) & 0x0ffffffff; - } - var tempValue = cvtHex(H0) + cvtHex(H1) + cvtHex(H2) + cvtHex(H3) + cvtHex(H4); - return tempValue.toLowerCase(); - } - }); -})(jQuery); \ No newline at end of file diff --git a/sai/js/jqBootstrapValidation.js b/sai/js/jqBootstrapValidation.js deleted file mode 100644 index 29cbb08..0000000 --- a/sai/js/jqBootstrapValidation.js +++ /dev/null @@ -1,912 +0,0 @@ -/* jqBootstrapValidation - * A plugin for automating validation on Twitter Bootstrap formatted forms. - * - * v1.3.6 - * - * License: MIT - see LICENSE file - * - * http://ReactiveRaven.github.com/jqBootstrapValidation/ - */ - -(function( $ ){ - - var createdElements = []; - - var defaults = { - options: { - prependExistingHelpBlock: false, - sniffHtml: true, // sniff for 'required', 'maxlength', etc - preventSubmit: true, // stop the form submit event from firing if validation fails - submitError: false, // function called if there is an error when trying to submit - submitSuccess: false, // function called just before a successful submit event is sent to the server - semanticallyStrict: false, // set to true to tidy up generated HTML output - autoAdd: { - helpBlocks: true - }, - filter: function () { - // return $(this).is(":visible"); // only validate elements you can see - return true; // validate everything - } - }, - methods: { - init : function( options ) { - - var settings = $.extend(true, {}, defaults); - - settings.options = $.extend(true, settings.options, options); - - var $siblingElements = this; - - var uniqueForms = $.unique( - $siblingElements.map( function () { - return $(this).parents("form")[0]; - }).toArray() - ); - - $(uniqueForms).bind("submit", function (e) { - var $form = $(this); - var warningsFound = 0; - var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); - $inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); - - $inputs.each(function (i, el) { - var $this = $(el), - $controlGroup = $this.parents(".control-group").first(); - if ( - $controlGroup.hasClass("warning") - ) { - $controlGroup.removeClass("warning").addClass("error"); - warningsFound++; - } - }); - - $inputs.trigger("validationLostFocus.validation"); - - if (warningsFound) { - if (settings.options.preventSubmit) { - e.preventDefault(); - } - $form.addClass("error"); - if ($.isFunction(settings.options.submitError)) { - settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); - } - } else { - $form.removeClass("error"); - if ($.isFunction(settings.options.submitSuccess)) { - settings.options.submitSuccess($form, e); - } - } - }); - - return this.each(function(){ - - // Get references to everything we're interested in - var $this = $(this), - $controlGroup = $this.parents(".control-group").first(), - $helpBlock = $controlGroup.find(".help-block").first(), - $form = $this.parents("form").first(), - validatorNames = []; - - // create message container if not exists - if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { - $helpBlock = $('
    '); - $controlGroup.find('.controls').append($helpBlock); - createdElements.push($helpBlock[0]); - } - - // ============================================================= - // SNIFF HTML FOR VALIDATORS - // ============================================================= - - // *snort sniff snuffle* - - if (settings.options.sniffHtml) { - var message = ""; - // --------------------------------------------------------- - // PATTERN - // --------------------------------------------------------- - if ($this.attr("pattern") !== undefined) { - message = "Not in the expected format"; - if ($this.data("validationPatternMessage")) { - message = $this.data("validationPatternMessage"); - } - $this.data("validationPatternMessage", message); - $this.data("validationPatternRegex", $this.attr("pattern")); - } - // --------------------------------------------------------- - // MAX - // --------------------------------------------------------- - if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { - var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); - message = "Too high: Maximum of '" + max + "'"; - if ($this.data("validationMaxMessage")) { - message = $this.data("validationMaxMessage"); - } - $this.data("validationMaxMessage", message); - $this.data("validationMaxMax", max); - } - // --------------------------------------------------------- - // MIN - // --------------------------------------------------------- - if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { - var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); - message = "Too low: Minimum of '" + min + "'"; - if ($this.data("validationMinMessage")) { - message = $this.data("validationMinMessage"); - } - $this.data("validationMinMessage", message); - $this.data("validationMinMin", min); - } - // --------------------------------------------------------- - // MAXLENGTH - // --------------------------------------------------------- - if ($this.attr("maxlength") !== undefined) { - message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters"; - if ($this.data("validationMaxlengthMessage")) { - message = $this.data("validationMaxlengthMessage"); - } - $this.data("validationMaxlengthMessage", message); - $this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); - } - // --------------------------------------------------------- - // MINLENGTH - // --------------------------------------------------------- - if ($this.attr("minlength") !== undefined) { - message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters"; - if ($this.data("validationMinlengthMessage")) { - message = $this.data("validationMinlengthMessage"); - } - $this.data("validationMinlengthMessage", message); - $this.data("validationMinlengthMinlength", $this.attr("minlength")); - } - // --------------------------------------------------------- - // REQUIRED - // --------------------------------------------------------- - if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { - message = settings.builtInValidators.required.message; - if ($this.data("validationRequiredMessage")) { - message = $this.data("validationRequiredMessage"); - } - $this.data("validationRequiredMessage", message); - } - // --------------------------------------------------------- - // NUMBER - // --------------------------------------------------------- - if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { - message = settings.builtInValidators.number.message; - if ($this.data("validationNumberMessage")) { - message = $this.data("validationNumberMessage"); - } - $this.data("validationNumberMessage", message); - } - // --------------------------------------------------------- - // EMAIL - // --------------------------------------------------------- - if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { - message = "Not a valid email address"; - if ($this.data("validationValidemailMessage")) { - message = $this.data("validationValidemailMessage"); - } else if ($this.data("validationEmailMessage")) { - message = $this.data("validationEmailMessage"); - } - $this.data("validationValidemailMessage", message); - } - // --------------------------------------------------------- - // MINCHECKED - // --------------------------------------------------------- - if ($this.attr("minchecked") !== undefined) { - message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required"; - if ($this.data("validationMincheckedMessage")) { - message = $this.data("validationMincheckedMessage"); - } - $this.data("validationMincheckedMessage", message); - $this.data("validationMincheckedMinchecked", $this.attr("minchecked")); - } - // --------------------------------------------------------- - // MAXCHECKED - // --------------------------------------------------------- - if ($this.attr("maxchecked") !== undefined) { - message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required"; - if ($this.data("validationMaxcheckedMessage")) { - message = $this.data("validationMaxcheckedMessage"); - } - $this.data("validationMaxcheckedMessage", message); - $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); - } - } - - // ============================================================= - // COLLECT VALIDATOR NAMES - // ============================================================= - - // Get named validators - if ($this.data("validation") !== undefined) { - validatorNames = $this.data("validation").split(","); - } - - // Get extra ones defined on the element's data attributes - $.each($this.data(), function (i, el) { - var parts = i.replace(/([A-Z])/g, ",$1").split(","); - if (parts[0] === "validation" && parts[1]) { - validatorNames.push(parts[1]); - } - }); - - // ============================================================= - // NORMALISE VALIDATOR NAMES - // ============================================================= - - var validatorNamesToInspect = validatorNames; - var newValidatorNamesToInspect = []; - - do // repeatedly expand 'shortcut' validators into their real validators - { - // Uppercase only the first letter of each name - $.each(validatorNames, function (i, el) { - validatorNames[i] = formatValidatorName(el); - }); - - // Remove duplicate validator names - validatorNames = $.unique(validatorNames); - - // Pull out the new validator names from each shortcut - newValidatorNamesToInspect = []; - $.each(validatorNamesToInspect, function(i, el) { - if ($this.data("validation" + el + "Shortcut") !== undefined) { - // Are these custom validators? - // Pull them out! - $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { - newValidatorNamesToInspect.push(el2); - }); - } else if (settings.builtInValidators[el.toLowerCase()]) { - // Is this a recognised built-in? - // Pull it out! - var validator = settings.builtInValidators[el.toLowerCase()]; - if (validator.type.toLowerCase() === "shortcut") { - $.each(validator.shortcut.split(","), function (i, el) { - el = formatValidatorName(el); - newValidatorNamesToInspect.push(el); - validatorNames.push(el); - }); - } - } - }); - - validatorNamesToInspect = newValidatorNamesToInspect; - - } while (validatorNamesToInspect.length > 0) - - // ============================================================= - // SET UP VALIDATOR ARRAYS - // ============================================================= - - var validators = {}; - - $.each(validatorNames, function (i, el) { - // Set up the 'override' message - var message = $this.data("validation" + el + "Message"); - var hasOverrideMessage = (message !== undefined); - var foundValidator = false; - message = - ( - message - ? message - : "'" + el + "' validation failed " - ) - ; - - $.each( - settings.validatorTypes, - function (validatorType, validatorTemplate) { - if (validators[validatorType] === undefined) { - validators[validatorType] = []; - } - if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { - validators[validatorType].push( - $.extend( - true, - { - name: formatValidatorName(validatorTemplate.name), - message: message - }, - validatorTemplate.init($this, el) - ) - ); - foundValidator = true; - } - } - ); - - if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { - - var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); - if (hasOverrideMessage) { - validator.message = message; - } - var validatorType = validator.type.toLowerCase(); - - if (validatorType === "shortcut") { - foundValidator = true; - } else { - $.each( - settings.validatorTypes, - function (validatorTemplateType, validatorTemplate) { - if (validators[validatorTemplateType] === undefined) { - validators[validatorTemplateType] = []; - } - if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { - $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); - validators[validatorType].push( - $.extend( - validator, - validatorTemplate.init($this, el) - ) - ); - foundValidator = true; - } - } - ); - } - } - - if (! foundValidator) { - $.error("Cannot find validation info for '" + el + "'"); - } - }); - - // ============================================================= - // STORE FALLBACK VALUES - // ============================================================= - - $helpBlock.data( - "original-contents", - ( - $helpBlock.data("original-contents") - ? $helpBlock.data("original-contents") - : $helpBlock.html() - ) - ); - - $helpBlock.data( - "original-role", - ( - $helpBlock.data("original-role") - ? $helpBlock.data("original-role") - : $helpBlock.attr("role") - ) - ); - - $controlGroup.data( - "original-classes", - ( - $controlGroup.data("original-clases") - ? $controlGroup.data("original-classes") - : $controlGroup.attr("class") - ) - ); - - $this.data( - "original-aria-invalid", - ( - $this.data("original-aria-invalid") - ? $this.data("original-aria-invalid") - : $this.attr("aria-invalid") - ) - ); - - // ============================================================= - // VALIDATION - // ============================================================= - - $this.bind( - "validation.validation", - function (event, params) { - - var value = getValue($this); - - // Get a list of the errors to apply - var errorsFound = []; - - $.each(validators, function (validatorType, validatorTypeArray) { - if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { - $.each(validatorTypeArray, function (i, validator) { - if (settings.validatorTypes[validatorType].validate($this, value, validator)) { - errorsFound.push(validator.message); - } - }); - } - }); - - return errorsFound; - } - ); - - $this.bind( - "getValidators.validation", - function () { - return validators; - } - ); - - // ============================================================= - // WATCH FOR CHANGES - // ============================================================= - $this.bind( - "submit.validation", - function () { - return $this.triggerHandler("change.validation", {submitting: true}); - } - ); - $this.bind( - [ - "keyup", - "focus", - "blur", - "click", - "keydown", - "keypress", - "change" - ].join(".validation ") + ".validation", - function (e, params) { - - var value = getValue($this); - - var errorsFound = []; - - $controlGroup.find("input,textarea,select").each(function (i, el) { - var oldCount = errorsFound.length; - $.each($(el).triggerHandler("validation.validation", params), function (j, message) { - errorsFound.push(message); - }); - if (errorsFound.length > oldCount) { - $(el).attr("aria-invalid", "true"); - } else { - var original = $this.data("original-aria-invalid"); - $(el).attr("aria-invalid", (original !== undefined ? original : false)); - } - }); - - $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); - - errorsFound = $.unique(errorsFound.sort()); - - // Were there any errors? - if (errorsFound.length) { - // Better flag it up as a warning. - $controlGroup.removeClass("success error").addClass("warning"); - - // How many errors did we find? - if (settings.options.semanticallyStrict && errorsFound.length === 1) { - // Only one? Being strict? Just output it. - $helpBlock.html(errorsFound[0] + - ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); - } else { - // Multiple? Being sloppy? Glue them together into an UL. - $helpBlock.html("
    • " + errorsFound.join("
    • ") + "
    " + - ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); - } - } else { - $controlGroup.removeClass("warning error success"); - if (value.length > 0) { - $controlGroup.addClass("success"); - } - $helpBlock.html($helpBlock.data("original-contents")); - } - - if (e.type === "blur") { - $controlGroup.removeClass("success"); - } - } - ); - $this.bind("validationLostFocus.validation", function () { - $controlGroup.removeClass("success"); - }); - }); - }, - destroy : function( ) { - - return this.each( - function() { - - var - $this = $(this), - $controlGroup = $this.parents(".control-group").first(), - $helpBlock = $controlGroup.find(".help-block").first(); - - // remove our events - $this.unbind('.validation'); // events are namespaced. - // reset help text - $helpBlock.html($helpBlock.data("original-contents")); - // reset classes - $controlGroup.attr("class", $controlGroup.data("original-classes")); - // reset aria - $this.attr("aria-invalid", $this.data("original-aria-invalid")); - // reset role - $helpBlock.attr("role", $this.data("original-role")); - // remove all elements we created - if (createdElements.indexOf($helpBlock[0]) > -1) { - $helpBlock.remove(); - } - - } - ); - - }, - collectErrors : function(includeEmpty) { - - var errorMessages = {}; - this.each(function (i, el) { - var $el = $(el); - var name = $el.attr("name"); - var errors = $el.triggerHandler("validation.validation", {includeEmpty: true}); - errorMessages[name] = $.extend(true, errors, errorMessages[name]); - }); - - $.each(errorMessages, function (i, el) { - if (el.length === 0) { - delete errorMessages[i]; - } - }); - - return errorMessages; - - }, - hasErrors: function() { - - var errorMessages = []; - - this.each(function (i, el) { - errorMessages = errorMessages.concat( - $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : [] - ); - }); - - return (errorMessages.length > 0); - }, - override : function (newDefaults) { - defaults = $.extend(true, defaults, newDefaults); - } - }, - validatorTypes: { - callback: { - name: "callback", - init: function ($this, name) { - return { - validatorName: name, - callback: $this.data("validation" + name + "Callback"), - lastValue: $this.val(), - lastValid: true, - lastFinished: true - }; - }, - validate: function ($this, value, validator) { - if (validator.lastValue === value && validator.lastFinished) { - return !validator.lastValid; - } - - if (validator.lastFinished === true) - { - validator.lastValue = value; - validator.lastValid = true; - validator.lastFinished = false; - - var rrjqbvValidator = validator; - var rrjqbvThis = $this; - executeFunctionByName( - validator.callback, - window, - $this, - value, - function (data) { - if (rrjqbvValidator.lastValue === data.value) { - rrjqbvValidator.lastValid = data.valid; - if (data.message) { - rrjqbvValidator.message = data.message; - } - rrjqbvValidator.lastFinished = true; - rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); - // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function () { - rrjqbvThis.trigger("change.validation"); - }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst - } - } - ); - } - - return false; - - } - }, - ajax: { - name: "ajax", - init: function ($this, name) { - return { - validatorName: name, - url: $this.data("validation" + name + "Ajax"), - lastValue: $this.val(), - lastValid: true, - lastFinished: true - }; - }, - validate: function ($this, value, validator) { - if (""+validator.lastValue === ""+value && validator.lastFinished === true) { - return validator.lastValid === false; - } - - if (validator.lastFinished === true) - { - validator.lastValue = value; - validator.lastValid = true; - validator.lastFinished = false; - $.ajax({ - url: validator.url, - data: "value=" + value + "&field=" + $this.attr("name"), - dataType: "json", - success: function (data) { - if (""+validator.lastValue === ""+data.value) { - validator.lastValid = !!(data.valid); - if (data.message) { - validator.message = data.message; - } - validator.lastFinished = true; - $this.data("validation" + validator.validatorName + "Message", validator.message); - // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function () { - $this.trigger("change.validation"); - }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst - } - }, - failure: function () { - validator.lastValid = true; - validator.message = "ajax call failed"; - validator.lastFinished = true; - $this.data("validation" + validator.validatorName + "Message", validator.message); - // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function () { - $this.trigger("change.validation"); - }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst - } - }); - } - - return false; - - } - }, - regex: { - name: "regex", - init: function ($this, name) { - return {regex: regexFromString($this.data("validation" + name + "Regex"))}; - }, - validate: function ($this, value, validator) { - return (!validator.regex.test(value) && ! validator.negative) - || (validator.regex.test(value) && validator.negative); - } - }, - required: { - name: "required", - init: function ($this, name) { - return {}; - }, - validate: function ($this, value, validator) { - return !!(value.length === 0 && ! validator.negative) - || !!(value.length > 0 && validator.negative); - }, - blockSubmit: true - }, - match: { - name: "match", - init: function ($this, name) { - var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); - element.bind("validation.validation", function () { - $this.trigger("change.validation", {submitting: true}); - }); - return {"element": element}; - }, - validate: function ($this, value, validator) { - return (value !== validator.element.val() && ! validator.negative) - || (value === validator.element.val() && validator.negative); - }, - blockSubmit: true - }, - max: { - name: "max", - init: function ($this, name) { - return {max: $this.data("validation" + name + "Max")}; - }, - validate: function ($this, value, validator) { - return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative) - || (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); - } - }, - min: { - name: "min", - init: function ($this, name) { - return {min: $this.data("validation" + name + "Min")}; - }, - validate: function ($this, value, validator) { - return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative) - || (parseFloat(value) >= parseFloat(validator.min) && validator.negative); - } - }, - maxlength: { - name: "maxlength", - init: function ($this, name) { - return {maxlength: $this.data("validation" + name + "Maxlength")}; - }, - validate: function ($this, value, validator) { - return ((value.length > validator.maxlength) && ! validator.negative) - || ((value.length <= validator.maxlength) && validator.negative); - } - }, - minlength: { - name: "minlength", - init: function ($this, name) { - return {minlength: $this.data("validation" + name + "Minlength")}; - }, - validate: function ($this, value, validator) { - return ((value.length < validator.minlength) && ! validator.negative) - || ((value.length >= validator.minlength) && validator.negative); - } - }, - maxchecked: { - name: "maxchecked", - init: function ($this, name) { - var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); - elements.bind("click.validation", function () { - $this.trigger("change.validation", {includeEmpty: true}); - }); - return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements}; - }, - validate: function ($this, value, validator) { - return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative) - || (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); - }, - blockSubmit: true - }, - minchecked: { - name: "minchecked", - init: function ($this, name) { - var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); - elements.bind("click.validation", function () { - $this.trigger("change.validation", {includeEmpty: true}); - }); - return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements}; - }, - validate: function ($this, value, validator) { - return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative) - || (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); - }, - blockSubmit: true - } - }, - builtInValidators: { - email: { - name: "Email", - type: "shortcut", - shortcut: "validemail" - }, - validemail: { - name: "Validemail", - type: "regex", - regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", - message: "Not a valid email address" - }, - passwordagain: { - name: "Passwordagain", - type: "match", - match: "password", - message: "Does not match the given password" - }, - positive: { - name: "Positive", - type: "shortcut", - shortcut: "number,positivenumber" - }, - negative: { - name: "Negative", - type: "shortcut", - shortcut: "number,negativenumber" - }, - number: { - name: "Number", - type: "regex", - regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", - message: "Must be a number" - }, - integer: { - name: "Integer", - type: "regex", - regex: "[+-]?\\\d+", - message: "No decimal places allowed" - }, - positivenumber: { - name: "Positivenumber", - type: "min", - min: 0, - message: "Must be a positive number" - }, - negativenumber: { - name: "Negativenumber", - type: "max", - max: 0, - message: "Must be a negative number" - }, - required: { - name: "Required", - type: "required", - message: "This is required" - }, - checkone: { - name: "Checkone", - type: "minchecked", - minchecked: 1, - message: "Check at least one option" - } - } - }; - - var formatValidatorName = function (name) { - return name - .toLowerCase() - .replace( - /(^|\s)([a-z])/g , - function(m,p1,p2) { - return p1+p2.toUpperCase(); - } - ) - ; - }; - - var getValue = function ($this) { - // Extract the value we're talking about - var value = $this.val(); - var type = $this.attr("type"); - if (type === "checkbox") { - value = ($this.is(":checked") ? value : ""); - } - if (type === "radio") { - value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); - } - return value; - }; - - function regexFromString(inputstring) { - return new RegExp("^" + inputstring + "$"); - } - - /** - * Thanks to Jason Bunting via StackOverflow.com - * - * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910 - * Short link: http://tinyurl.com/executeFunctionByName - **/ - function executeFunctionByName(functionName, context /*, args*/) { - var args = Array.prototype.slice.call(arguments).splice(2); - var namespaces = functionName.split("."); - var func = namespaces.pop(); - for(var i = 0; i < namespaces.length; i++) { - context = context[namespaces[i]]; - } - return context[func].apply(this, args); - } - - $.fn.jqBootstrapValidation = function( method ) { - - if ( defaults.methods[method] ) { - return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof method === 'object' || ! method ) { - return defaults.methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' ); - return null; - } - - }; - - $.jqBootstrapValidation = function (options) { - $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments); - }; - -})( jQuery ); diff --git a/sai/modules/autoload.inc b/sai/modules/autoload.inc deleted file mode 100644 index 4bb638c..0000000 --- a/sai/modules/autoload.inc +++ /dev/null @@ -1,16 +0,0 @@ -span { - cursor:pointer -} -.tree>ul>li::before, .tree>ul>li::after { - border:0 -} -.tree li:last-child::before { - height:30px -} -.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span { - background:#eee; - border:1px solid #94a0b4; - color:#000 -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/js/saimod_sys_api.js b/sai/modules/saimod_sys_api/js/saimod_sys_api.js deleted file mode 100644 index 7bfe99a..0000000 --- a/sai/modules/saimod_sys_api/js/saimod_sys_api.js +++ /dev/null @@ -1,97 +0,0 @@ -var currentID = ''; - -function init_saimod_sys_api() { - saimod_sys_api_tree(); - saimod_sys_api_register_clickevents(); - -} - -function saimod_sys_api_loadcontent(){ - $('#api_wrapper').load('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_api', function(){ - console.log('api module loaded'); - saimod_sys_api_register_clickevents(); - }); - -} - -function saimod_sys_api_register_clickevents(){ - $('tr.api_entries').click(function() { - currentID = $(this).attr("id"); - $.ajax({ - url: './sai.php', - data: { sai_mod: '.SYSTEM.SAI.saimod_sys_api', - action: 'deletedialog', - ID: currentID}, - type: 'GET', - success: function(data) { - console.log("works"); - $('#api_content').html(data); - $('#del_api_close').click(function() { - console.log("olenski"); - $('#del_api_description').hide(); - $('#del_api_del').show(); - saimod_sys_api_loadcontent(); - }); - $('#del_api_del').click(function() { - $.ajax({ - url: './sai.php', - data: { sai_mod: '.SYSTEM.SAI.saimod_sys_api', - action: 'deletecall', - ID: currentID}, - type: 'GET', - success: function(data) { - console.log("api call deleted"); - $('#api_deletedialog').html('

    Api call deleted!

    '); - $('#del_api_del').hide(); - }});});}});}); - - $('#addcall').click(function() { - var id = $('#new_call_id').val(); - var group = $('#new_call_group').val(); - var type = $('#new_call_type').val(); - var parentid = $('#new_call_parentid').val(); - var parentvalue = $('#new_call_parentvalue').val(); - var name = $('#new_call_name').val(); - var verify = $('#new_call_verify').val(); - $.ajax({ - url: './sai.php', - data: { sai_mod: '.SYSTEM.SAI.saimod_sys_api', - action: 'addcall', - ID: id, - group: group, - type: type, - parentID: parentid, - parentValue : parentvalue, - name: name, - verify: verify}, - type: 'GET', - success: function(data) { - console.log("new api call added"); - saimod_sys_api_loadcontent(); - } - }); - - }); - $('#del_api_close').click(function() { - console.log("olenski"); - $('#del_api_description').hide(); - $('#del_api_del').show(); - saimod_sys_api_loadcontent(); - }); - $('#localetab a').click(function (e) {e.preventDefault(); $(this).tab('show');}); -} - -function saimod_sys_api_tree(){ - $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch'); - $('.tree li.parent_li > span').on('click', function (e) { - var children = $(this).parent('li.parent_li').find(' > ul > li'); - if (children.is(":visible")) { - children.hide('fast'); - $(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign'); - } else { - children.show('fast'); - $(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign'); - } - e.stopPropagation(); - }); -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_ADD.php b/sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_ADD.php deleted file mode 100644 index c858c26..0000000 --- a/sai/modules/saimod_sys_api/qq/SYS_SAIMOD_API_ADD.php +++ /dev/null @@ -1,11 +0,0 @@ -query('SELECT "group", count(*) as "count" FROM system.api GROUP BY "group" ORDER BY "group" ASC;'); - } else { - $res = $con->query('SELECT `group`, count(*) as `count` FROM system_api GROUP BY `group` ORDER BY `group` ASC;'); - } - - $vars['tabopts'] = ''; - $first = true; - while($r = $res->next()){ - $vars2 = array( 'active' => ($first ? 'active' : ''), - 'tab_id' => $r['group']); - $first = false; - $vars['tabopts'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/tpl/tabopt.tpl'), $vars2); - } - - if(\SYSTEM\system::isSystemDbInfoPG()){ - $res = $con->query('SELECT * FROM system.api ORDER BY "group", "ID" ASC;'); - } else { - $res = $con->query('SELECT * FROM system_api ORDER BY `group`, `ID` ASC;'); - } - - while($r = $res->next()){ - $tabs[$r['group']]['tab_id'] = $r['group']; - $tabs[$r['group']]['content'] = isset($tabs[$r['group']]['content']) ? $tabs[$r['group']]['content'] : ''; - $r['tr_class'] = self::tablerow_class($r['type']); - $r['type'] = self::type_names($r['type']); - $tabs[$r['group']]['content'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/tpl/list_entry.tpl'), $r); - } - - $vars['tabs'] = ''; - $first = true; - foreach($tabs as $tab){ - $tab['active'] = ($first ? 'active' : ''); - $first = false; - $vars['tabs'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/tpl/tab.tpl'), $tab);} - - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/tpl/tabs.tpl'), $vars); - -/* $result = ""; - $result .= ''.''.$r['ID'].''.''.$r['group'].''.''.$r['type'].''.''.$r['parentID'].''.''.$r['parentValue'].''.''.$r['name'].''.''.$r['verify'].''.''; - return $result;*/ - } - - public static function sai_mod__system_sai_saimod_sys_api_action_deletedialog($ID){ - $res = \SYSTEM\DBD\SYS_SAIMOD_API_SINGLE_SELECT::Q1(array($ID)); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/tpl/delete_dialog.tpl'), $res); - } - - public static function sai_mod__system_sai_saimod_sys_api_action_addcall($ID,$group,$type,$parentID,$parentValue,$name,$verify){ - if(!\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_API)){ - throw new \SYSTEM\LOG\ERROR("You dont have edit Rights - Cant proceeed");} - if($parentValue == ''){ $parentValue = NULL;} - if($verify == ''){ $verify = NULL;} - \SYSTEM\DBD\SYS_SAIMOD_API_ADD::QI(array($ID,$group,$type,$parentID,$parentValue,$name,$verify)); - return \SYSTEM\LOG\JsonResult::ok(); - } - - public static function sai_mod__system_sai_saimod_sys_api_action_deletecall($ID){ - if(!\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_API)){ - throw new \SYSTEM\LOG\ERROR("You dont have edit Rights - Cant proceeed");} - \SYSTEM\DBD\SYS_SAIMOD_API_DEL::QI(array($ID)); - return \SYSTEM\LOG\JsonResult::ok(); - } - - private static function type_names($type){ - switch($type){ - case 0: return 'COMMAND'; - case 1: return 'COMMAND_FLAG'; - case 2: return 'PARAMETER'; - case 3: return 'PARAMETER_OPT'; - case 4: return 'STATIC'; - default: return 'Problem unknown type'; - } - } - - private static function tablerow_class($flag){ - switch($flag){ - case 0: return 'info'; - case 1: return ''; - case 4: return 'warning'; - default: return 'success'; - } - } - - public static function html_li_menu(){return '
  • API
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI) && \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_API);} - - public static function css(){ - return array(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/css/saimod_sys_api.css'));} - public static function js(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_api/js/saimod_sys_api.js'));} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/tpl/delete_dialog.tpl b/sai/modules/saimod_sys_api/tpl/delete_dialog.tpl deleted file mode 100644 index 54505c1..0000000 --- a/sai/modules/saimod_sys_api/tpl/delete_dialog.tpl +++ /dev/null @@ -1,26 +0,0 @@ -
    -
    Api Call: ${ID}
    -
    - - - - - - - - - - - - - - - - - - - -
    IDGroupTypeParentIDParentValueNameVerify
    ${ID}${group}${type}${parentID}${parentValue}${name}${verify}
    -
    - - diff --git a/sai/modules/saimod_sys_api/tpl/list_entry.tpl b/sai/modules/saimod_sys_api/tpl/list_entry.tpl deleted file mode 100644 index b7d9845..0000000 --- a/sai/modules/saimod_sys_api/tpl/list_entry.tpl +++ /dev/null @@ -1,9 +0,0 @@ - - ${ID} - ${group} - ${type} - ${parentID} - ${parentValue} - ${name} - ${verify} - \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/tpl/tab.tpl b/sai/modules/saimod_sys_api/tpl/tab.tpl deleted file mode 100644 index 7e43161..0000000 --- a/sai/modules/saimod_sys_api/tpl/tab.tpl +++ /dev/null @@ -1,14 +0,0 @@ -
    - - - - - - - - - - - ${content} -
    IDGroupTypeParentIDParentValueNameVerify
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/tpl/tabopt.tpl b/sai/modules/saimod_sys_api/tpl/tabopt.tpl deleted file mode 100644 index cf223b0..0000000 --- a/sai/modules/saimod_sys_api/tpl/tabopt.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • Group ${tab_id}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_api/tpl/tabs.tpl b/sai/modules/saimod_sys_api/tpl/tabs.tpl deleted file mode 100644 index aa9102c..0000000 --- a/sai/modules/saimod_sys_api/tpl/tabs.tpl +++ /dev/null @@ -1,36 +0,0 @@ -
    -

    System API

    -
    -
    -
    - -
    - ${tabs} -
    -
    - - - - - - - - - - - - - - - - - - - - -
    IDGroupTypeParentIDParentValueNameVerify
    - -
    -
    diff --git a/sai/modules/saimod_sys_cache/autoload.inc b/sai/modules/saimod_sys_cache/autoload.inc deleted file mode 100644 index 12c20b3..0000000 --- a/sai/modules/saimod_sys_cache/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ -query('SELECT COUNT(*)as "count" FROM system.cache'); - } else { - $res = $con->query('SELECT COUNT(*) as count FROM system_cache'); - } - - $r = $res->next(); - - $result = '

    Cache


    '. - 'Entries: '.$r['count'].' showing 100'. - ''. - ''.''.''.''.''.''; - - - if(\SYSTEM\system::isSystemDbInfoPG()){ - $res = $con->query('SELECT *, encode(data,\'base64\') FROM system.cache ORDER BY "ID" ASC LIMIT 100;'); - } else { - $res = $con->query('SELECT * FROM system_cache ORDER BY ID ASC LIMIT 100;'); - } - - while($r = $res->next()){ - $result .= ''.''.''.''.''.'';} - - $result .= '
    '.'ID'.''.'CacheID'.''.'Ident'.''.'Data'.'
    '.$r['ID'].''.$r['CacheID'].''.$r['Ident'].''.''.'
    '; - - return $result; - } - - private static function tablerow_class($cacheID){ - if($cacheID == 1){ - return 'info';} - - return 'success'; - } - - public static function html_li_menu(){return '
  • Cache
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);} - - //public static function css(){} - //public static function js(){} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_config/autoload.inc b/sai/modules/saimod_sys_config/autoload.inc deleted file mode 100644 index 0182131..0000000 --- a/sai/modules/saimod_sys_config/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ -System Config
    '. - ''. - ''.''.''.''.''; - - $result .= ''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - $result .= ''.''.''.''.''; - - $result .= '
    '.'Config ID'.''.'Config Name'.''.'Value'.'
    Basics
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_ERRORREPORTING. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_ERRORREPORTING'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_ERRORREPORTING). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS'. ''.implode(',',\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS)). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_LANG. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_LANG'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_LANG). '
    Database
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_TYPE. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_TYPE'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_TYPE). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_HOST. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_HOST'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_HOST). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_PORT. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_PORT'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_PORT). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_USER. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_USER'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_USER). '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_PASSWORD. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_PASSWORD'. ''.'<hidden>'. '
    '.\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_DBNAME. ''.'\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_DBNAME'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DB_DBNAME). '
    System Admin Interface
    '.\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_PROJECT. ''.'\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_PROJECT'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_PROJECT). '
    '.\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT. ''.'\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT). '
    '.\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE. ''.'\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE'. ''.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE). '
    '; - - return $result; - } - public static function html_li_menu(){return '
  • Config
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);} - - //public static function css(){} - //public static function js(){} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_cron/autoload.inc b/sai/modules/saimod_sys_cron/autoload.inc deleted file mode 100644 index 01c1646..0000000 --- a/sai/modules/saimod_sys_cron/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ -span { - cursor:pointer -} -.tree>ul>li::before, .tree>ul>li::after { - border:0 -} -.tree li:last-child::before { - height:30px -} -.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span { - background:#eee; - border:1px solid #94a0b4; - color:#000 -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_cron/js/saimod_sys_cron.js b/sai/modules/saimod_sys_cron/js/saimod_sys_cron.js deleted file mode 100644 index 5b17e6f..0000000 --- a/sai/modules/saimod_sys_cron/js/saimod_sys_cron.js +++ /dev/null @@ -1,83 +0,0 @@ -function init_saimod_sys_cron() { - register_cron_add(); - register_cron_del(); - register_cron_edit(); - register_cron_change(); -} - -function register_cron_change(){ - $('.btn_cron_status').click(function(){ - $.ajax({ type :'GET', - url : './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_cron&action=change'+ - '&cls='+$(this).attr('_class')+ - '&status='+$('#select_status_'+$(this).attr('_i')).val(), - success : function(data) { - if(data.status){ - $('#content-wrapper').load('./sai.php' + 'sai_mod=.SYSTEM.SAI.saimod_sys_cron',function(){ - init__SYSTEM_SAI_saimod_sys_cron(); - }); - }else{ - alert('Problem: '+data);} - } - }); - }); -} - -function register_cron_del(){ - $('.btn_cron_del').click(function(){ - $.ajax({ type :'GET', - url : './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_cron&action=del'+ - '&cls='+$(this).attr('_class'), - success : function(data) { - if(data.status){ - $('#content-wrapper').load('./sai.php' + 'sai_mod=.SYSTEM.SAI.saimod_sys_cron',function(){ - init__SYSTEM_SAI_saimod_sys_cron(); - }); - }else{ - alert('Problem: '+data);} - } - }); - }); -} - -function register_cron_edit(){ - $('.btn_cron_edit').click(function(){ - $('#input_cron_class').val($(this).attr('_class')); - $('#input_cron_min').val($(this).attr('_min')); - $('#input_cron_hour').val($(this).attr('_hour')); - $('#input_cron_day').val($(this).attr('_day')); - $('#input_cron_day_week').val($(this).attr('_day_week')); - $('#input_cron_month').val($(this).attr('_month')); - $("#btn_cron_add").focus(); - }); -} - -function register_cron_add(){ - $('#btn_cron_add').click(function() { - var cls = $('#input_cron_class').val(); - var min = $('#input_cron_min').val(); - var hour = $('#input_cron_hour').val(); - var day = $('#input_cron_day').val(); - var day_week = $('#input_cron_day_week').val(); - var month = $('#input_cron_month').val(); - $.ajax({url: './sai.php', - data: { sai_mod: '.SYSTEM.SAI.saimod_sys_cron', - action: 'add', - cls: cls, - min: min, - hour: hour, - day: day, - day_week: day_week, - month: month}, - type: 'GET', - success: function(data) { - if(data.status){ - $('#content-wrapper').load('./sai.php' + 'sai_mod=.SYSTEM.SAI.saimod_sys_cron',function(){ - init__SYSTEM_SAI_saimod_sys_cron(); - }); - }else{ - alert('Problem: '+data);} - } - }); - }); -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON.php b/sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON.php deleted file mode 100644 index 5fa8721..0000000 --- a/sai/modules/saimod_sys_cron/qq/SYS_SAIMOD_CRON.php +++ /dev/null @@ -1,11 +0,0 @@ -next()){ - $r['selected_0'] = $r['selected_1'] = $r['selected_2'] = $r['selected_3'] = ''; - $r['next'] = date('Y-m-d H:i:s',\SYSTEM\CRON\cron::next($r['class'])); - $r['selected_'.$r['status']] = 'selected'; - $r['i'] = $i++; - $vars['content'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_cron/tpl/list_entry.tpl'), $r);} - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_cron/tpl/tabs.tpl'), $vars); - } - - public static function sai_mod__system_sai_saimod_sys_cron_action_change($cls,$status){ - if(!\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_CRON)){ - throw new \SYSTEM\LOG\ERROR("You dont have edit Rights - Cant proceeed");} - \SYSTEM\DBD\SYS_SAIMOD_CRON_CHANGE::QI(array($status, $cls)); - return \SYSTEM\LOG\JsonResult::ok(); - } - - public static function sai_mod__system_sai_saimod_sys_cron_action_add($cls,$min,$hour,$day,$day_week,$month){ - if(!\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_CRON)){ - throw new \SYSTEM\LOG\ERROR("You dont have edit Rights - Cant proceeed");} - if(!\SYSTEM\CRON\cron::check($cls)){ - throw new \SYSTEM\LOG\ERROR("Given Class is not a CronJob");} - \SYSTEM\DBD\SYS_SAIMOD_CRON_ADD::QI(array($cls,$min,$hour,$day,$day_week,$month)); - return \SYSTEM\LOG\JsonResult::ok(); - } - - public static function sai_mod__system_sai_saimod_sys_cron_action_del($cls){ - if(!\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_CRON)){ - throw new \SYSTEM\LOG\ERROR("You dont have edit Rights - Cant proceeed");} - \SYSTEM\DBD\SYS_SAIMOD_CRON_DEL::QI(array($cls)); - return \SYSTEM\LOG\JsonResult::ok();} - - public static function html_li_menu(){return '
  • Cron
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_CRON);} - - public static function css(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_cron/css/saimod_sys_cron.css'));} - public static function js(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_cron/js/saimod_sys_cron.js'));} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_cron/tpl/list_entry.tpl b/sai/modules/saimod_sys_cron/tpl/list_entry.tpl deleted file mode 100644 index 4b131e4..0000000 --- a/sai/modules/saimod_sys_cron/tpl/list_entry.tpl +++ /dev/null @@ -1,23 +0,0 @@ - - ${class} - ${min} - ${hour} - ${day} - ${day_week} - ${month} - ${last_run} - ${next} - - - - - - - - - \ No newline at end of file diff --git a/sai/modules/saimod_sys_cron/tpl/tabs.tpl b/sai/modules/saimod_sys_cron/tpl/tabs.tpl deleted file mode 100644 index e79d3fb..0000000 --- a/sai/modules/saimod_sys_cron/tpl/tabs.tpl +++ /dev/null @@ -1,35 +0,0 @@ -
    -

    System Cron

    -
    - Last Visit: ${last_visit}
    - Start Cron -
    - - - - - - - - - - - - - - ${content} - - - - - - - - - - - - -
    classminhourdayday_weekmonthlast_runnext_runstatusaction
    -
    -
    diff --git a/sai/modules/saimod_sys_docu/autoload.inc b/sai/modules/saimod_sys_docu/autoload.inc deleted file mode 100644 index 9159a3d..0000000 --- a/sai/modules/saimod_sys_docu/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ - $docs){ - $vars2 = array( 'active' => ($first ? 'active' : ''), - 'tab_id' => str_replace(' ', '_', $cat), - 'tab_id_pretty' => $cat); - $first = false; - $vars['tabopts'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/tpl/tabopt.tpl'), $vars2); - - $first2 = true; - foreach($docs as $doc){ - $tabs[$cat]['tab_id'] = str_replace(' ', '_', $cat); - $tabs[$cat]['content'] = isset($tabs[$cat]['content']) ? $tabs[$cat]['content'] : ''; - $tabs[$cat]['menu'] = isset($tabs[$cat]['menu']) ? $tabs[$cat]['menu'] : ''; - //$tabs[$cat]['content'] .= \Michelf\MarkdownExtra::defaultTransform(file_get_contents($doc)); - $vars3 = array( 'active' => ($first2 ? 'active' : ''), - 'content' => \Michelf\MarkdownExtra::defaultTransform(file_get_contents($doc)), - 'tab_id' => str_replace(array('.',' ','\\','/'), '_', $doc)); - $tabs[$cat]['content'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/tpl/tab2.tpl'), $vars3); - $vars3 = array( 'active' => ($first2 ? 'active' : ''), - 'tab_id' => str_replace(array('.',' ','\\','/'), '_', $doc), - 'tab_id_pretty' => basename($doc)); - $tabs[$cat]['menu'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/tpl/tabopt.tpl'), $vars3); - $first2 = false; - } - - $vars['tabs'] = ''; - $first = true; - foreach($tabs as $tab){ - $tab['active'] = ($first ? 'active' : ''); - $first = false; - $vars['tabs'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/tpl/tab.tpl'), $tab);} - } - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/tpl/tabs.tpl'), $vars); - } - - public static function html_li_menu(){return '
  • Docu
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);} - - //public static function css(){} - public static function js(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSYSTEM(),'lib/EpicEditor/js/epiceditor.min.js'), - \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_docu/js/saimod_sys_docu.js'));} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_docu/tpl/tab.tpl b/sai/modules/saimod_sys_docu/tpl/tab.tpl deleted file mode 100644 index 804cb3d..0000000 --- a/sai/modules/saimod_sys_docu/tpl/tab.tpl +++ /dev/null @@ -1,12 +0,0 @@ -
    -
    - -
    - ${content} -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_docu/tpl/tab2.tpl b/sai/modules/saimod_sys_docu/tpl/tab2.tpl deleted file mode 100644 index 53a7e4c..0000000 --- a/sai/modules/saimod_sys_docu/tpl/tab2.tpl +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    -
    - ${content} - -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_docu/tpl/tabopt.tpl b/sai/modules/saimod_sys_docu/tpl/tabopt.tpl deleted file mode 100644 index de4373f..0000000 --- a/sai/modules/saimod_sys_docu/tpl/tabopt.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • ${tab_id_pretty}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_docu/tpl/tabs.tpl b/sai/modules/saimod_sys_docu/tpl/tabs.tpl deleted file mode 100644 index 8661ea0..0000000 --- a/sai/modules/saimod_sys_docu/tpl/tabs.tpl +++ /dev/null @@ -1,10 +0,0 @@ -

    System Documentation

    -
    -
    - -
    - ${tabs} -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/autoload.inc b/sai/modules/saimod_sys_files/autoload.inc deleted file mode 100644 index f688fac..0000000 --- a/sai/modules/saimod_sys_files/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ - '', 'tabs' => ''); - $file_folders = \SYSTEM\FILES\files::get(); - $first = true; - foreach($file_folders as $name=>$folder){ - $result['tabopts'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/tpl/saimod_sys_files_tabopt.tpl'),array('name' => $name, 'active' => $first ? 'active' : '')); - $result['tabs'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/tpl/saimod_sys_files_tab.tpl'),array('name' => $name, 'active' => $first ? 'active' : '', 'content' => $first ? self::sai_mod__SYSTEM_SAI_saimod_sys_files_action_tab($name) : '')); - $first = false; - } - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/tpl/saimod_sys_files.tpl'),$result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_files_action_tab($name){ - $result = ''; - $cat = \SYSTEM\FILES\files::get($name); - $i = 0; - foreach($cat as $file){ - $result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/tpl/saimod_sys_files_tableentry.tpl'), array('i' => $i++, 'cat' => $name, 'name' => $file, 'extension' => substr($file,-3,3), 'url' => 'api.php?call=files&cat='.$name.'&id='.$file));} - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/tpl/saimod_sys_files_tabfull.tpl'), array('cat' => $name, 'content' => $result));} - - public static function html_li_menu(){return '
  • Files
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI) && \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI_FILES);} - - //public static function css(){} - public static function js(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_files/js/saimod_sys_files.js'));} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/tpl/saimod_sys_files.tpl b/sai/modules/saimod_sys_files/tpl/saimod_sys_files.tpl deleted file mode 100644 index 9c8842f..0000000 --- a/sai/modules/saimod_sys_files/tpl/saimod_sys_files.tpl +++ /dev/null @@ -1,10 +0,0 @@ -

    User Files

    -
    -
    - -
    - ${tabs} -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tab.tpl b/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tab.tpl deleted file mode 100644 index 1731587..0000000 --- a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tab.tpl +++ /dev/null @@ -1 +0,0 @@ -
    ${content}
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabfull.tpl b/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabfull.tpl deleted file mode 100644 index a55e065..0000000 --- a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabfull.tpl +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - ${content} - -
    - - - - - -
    NameExtensionURLAction
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tableentry.tpl b/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tableentry.tpl deleted file mode 100644 index b685806..0000000 --- a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tableentry.tpl +++ /dev/null @@ -1,12 +0,0 @@ - - ${name} - ${extension} - - ${url} - - - - - - - \ No newline at end of file diff --git a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabopt.tpl b/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabopt.tpl deleted file mode 100644 index 42f88a7..0000000 --- a/sai/modules/saimod_sys_files/tpl/saimod_sys_files_tabopt.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • ${name}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/autoload.inc b/sai/modules/saimod_sys_log/autoload.inc deleted file mode 100644 index 54ea0cb..0000000 --- a/sai/modules/saimod_sys_log/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ -D!?H2$M zU}whwS0g!1d@9(>e!%W{WeX1(&Pu-QF>ukNt^Y z`<6!zCwTOV*InasT|3PQYA7SJ2`UMR608aHR%FVwPuzFl)}fVeE-mkU{$}s%-4Xg4 zb66X#1v@2}pc)xd`H%Jj`5(~0PMv(BhwkhJ7OW@=k9+#4WLS0X8 ziG5@h_jcNC# $file));} - } - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log_stats.tpl'), $vars);} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_system($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_CLASS_SYSTEM::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('class_system', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\COUNTER" then 1 else 0 end) class_SYSTEM_LOG_COUNTER,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\INFO" then 1 else 0 end) class_SYSTEM_LOG_INFO,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\DEPRECATED" then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\WARNING" then 1 else 0 end) class_SYSTEM_LOG_WARNING,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\ERROR" then 1 else 0 end) class_SYSTEM_LOG_ERROR,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\ERROR_EXCEPTION" then 1 else 0 end) class_SYSTEM_LOG_ERROR_EXCEPTION,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\SHUTDOWN_EXCEPTION" then 1 else 0 end) class_SYSTEM_LOG_SHUTDOWN_EXCEPTION' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_other($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_CLASS_OTHER::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('class_other', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'Exception\' then 1 else 0 end) class_Exception,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'RuntimeException\' then 1 else 0 end) class_RuntimeException,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ErrorException\' then 1 else 0 end) class_ErrorException' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_basic($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_CLASS_BASIC::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('class_basic', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ERROR\' then 1 else 0 end) class_ERROR,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WARNING\' then 1 else 0 end) class_WARNING,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'INFO\' then 1 else 0 end) class_INFO,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'AppError\' then 1 else 0 end) class_AppError' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_basic($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_UNIQUE_BASIC::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('unique_basic', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_request($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_UNIQUE_REQUEST::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('unique_request', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.') as server_port_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.') as request_uri_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_POST.') as post_unique' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_exception($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_UNIQUE_EXCEPTION::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('unique_exception', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_LINE.') as line_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_referer($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_UNIQUE_REFERER::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('unique_referer', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.') as http_referer_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.') as http_user_agent_unique' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_visitor($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_BASIC_VISITOR::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('basic_visitor', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' - .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_sucess($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_BASIC_SUCCESS::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('basic_sucess', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'sum(case when not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\COUNTER" and' - .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\INFO" and' - .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "INFO" and' - .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\DEPRECATED" and' - .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "DEPRECATED" and ' - .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "PreprocessingLog" ' - .'then 1 else 0 end) class_fail,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\INFO" or ' - .\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\INFO" or ' - .\SYSTEM\DBD\system_log::FIELD_CLASS.' = "INFO" or ' - .\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\DEPRECATE" or ' - .\SYSTEM\DBD\system_log::FIELD_CLASS.' = "DEPRECATED" or ' - .\SYSTEM\DBD\system_log::FIELD_CLASS.' = "PreprocessingLog" ' - .'then 1 else 0 end) class_log,' - .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = "SYSTEM\\LOG\\COUNTER" then 1 else 0 end) class_sucess' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result);} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_querytime($filter,$db){ - $result = array(); - if(!$db){ - $result = \SYSTEM\DBD\SYS_SAIMOD_LOG_BASIC_QUERYTIME::QA(array($filter)); - } else { - $con = new \SYSTEM\DB\Connection(new \SYSTEM\DB\DBInfoSQLite(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CRON_LOG2SQLITE_PATH).$db)); - $res = $con->prepare('basic_querytime', - 'SELECT datetime(strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.') - strftime("%s",'.\SYSTEM\DBD\system_log::FIELD_TIME.')%:filter,"unixepoch", "localtime") as day,' - .'count(*) as count,' - .'avg('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_avg,' - .'max('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_max,' - .'min('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_min' - .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS - .' GROUP BY day' - .' ORDER BY day DESC' - .' LIMIT 30;', - array(':filter' => $filter)); - while($row = $res->next()){ - $result[] = $row;} - } - return \SYSTEM\LOG\JsonResult::toString($result);} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_error($error){ - $vars = \SYSTEM\DBD\SYS_SAIMOD_LOG_ERROR::QQ(array($error))->next(); - $vars['trace'] = implode('
    ', array_slice(explode('#', $vars['trace']), 1, -1)); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log_error.tpl'), $vars);} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter($filter = "%"){ - $filter = str_replace('\\', '\\\\', $filter); - $count = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTER_COUNT::Q1(array($filter)); - $res = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTER::QQ(array($filter)); - $table=''; - while($r = $res->next()){ - //print_r($r); - $r['class_row'] = self::tablerow_class($r['class']); - $r['time'] = self::time_elapsed_string(strtotime($r['time'])); - $r['message'] = substr($r['message'],0,255); - $table .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log_table_row.tpl'),$r); - } - $vars = array(); - $vars['count'] = $count['count']; - $vars['table'] = $table; - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log_table.tpl'), $vars); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_log(){ - $vars = array(); - $vars['table'] = self::sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter(); - $vars['error_filter'] = self::generate_error_filters(); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log_filter.tpl'), $vars); - } - - private static function time_elapsed_string($ptime){ - $etime = time() - $ptime; - if ($etime < 1){ - return '0 seconds';} - - $a = array( 12 * 30 * 24 * 60 * 60 => 'year', - 30 * 24 * 60 * 60 => 'month', - 24 * 60 * 60 => 'day', - 60 * 60 => 'hour', - 60 => 'minute', - 1 => 'second'); - - foreach ($a as $secs => $str){ - $d = $etime / $secs; - if ($d >= 1){ - $r = round($d); - return $r . ' ' . $str . ($r > 1 ? 's' : '') . ' ago';} - } - } - - private static function generate_error_filters(){ - $res = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTERS::QQ(); - $result = ''; - while($row = $res->next()){ - $result .= '
  • '.$row['class'].'
  • ';} - return $result; - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){ - $vars = array(); - $vars['PICPATH'] = \SYSTEM\WEBPATH(new \SYSTEM\PSAI(), 'modules/saimod_sys_log/img/'); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/tpl/saimod_sys_log.tpl'), $vars); - } - - public static function tablerow_class($class){ - switch($class){ - case 'SYSTEM\LOG\INFO': case 'INFO': case 'SYSTEM\LOG\COUNTER': - return 'success'; - case 'SYSTEM\LOG\DEPRECATED': case 'DEPRECATED': - return 'info'; - case 'SYSTEM\LOG\ERROR': case 'ERROR': case 'Exception': case 'SYSTEM\LOG\ERROR_EXCEPTION': - case 'ErrorException': case 'SYSTEM\LOG\SHUTDOWN_EXCEPTION': - return 'error'; - case 'SYSTEM\LOG\WARNING': case 'WARNING': - return 'warning'; - default: - return ''; - } - } - - public static function html_li_menu(){return '
  • Log
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);} - - //public static function css(){} - public static function js(){ - return array(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/js/saimod_sys_log.js'));} -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log.tpl deleted file mode 100644 index d7fce53..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log.tpl +++ /dev/null @@ -1,14 +0,0 @@ -

    System Log

    -
    -
    - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_error.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_error.tpl deleted file mode 100644 index c000c34..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_error.tpl +++ /dev/null @@ -1,23 +0,0 @@ -

    Error ${ID}

    - - - - - - - - - - - - - - - - - - - - - -
    PropertyValue
    ID${ID}
    class${class}
    code${code}
    file${file}
    line${line}
    trace${trace}
    ip${ip}
    querytime${querytime}
    time${time}
    server_name${server_name}
    server_port${server_port}
    request_uri${request_uri}
    url${server_name}:${server_port}${request_uri}
    post${post}
    http_referer${http_referer}
    http_user_agent${http_user_agent}
    user${username}
    thrown${thrown}
    message${message}
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_filter.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_filter.tpl deleted file mode 100644 index 3dbf4aa..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_filter.tpl +++ /dev/null @@ -1,5 +0,0 @@ - -
    ${table}
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats.tpl deleted file mode 100644 index a004b46..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats.tpl +++ /dev/null @@ -1,43 +0,0 @@ -
    - -
    -
    - - -
    -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats_menu.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats_menu.tpl deleted file mode 100644 index 2b2455a..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_stats_menu.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • ${file}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table.tpl deleted file mode 100644 index 5c7a35e..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table.tpl +++ /dev/null @@ -1,15 +0,0 @@ -Rows: ${count} - - - - - - - - - - - - - ${table} -
    time agoclassmessagefilelineipurluserquerytime
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table_row.tpl b/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table_row.tpl deleted file mode 100644 index 97b6b72..0000000 --- a/sai/modules/saimod_sys_log/tpl/saimod_sys_log_table_row.tpl +++ /dev/null @@ -1,11 +0,0 @@ - - ${time} - ${class} - ${message} - ${file} - ${line} - ${ip} - ${server_name}:${server_port}${request_uri} - ${username} - ${querytime} - \ No newline at end of file diff --git a/sai/modules/saimod_sys_login/autoload.inc b/sai/modules/saimod_sys_login/autoload.inc deleted file mode 100644 index 30cf2ec..0000000 --- a/sai/modules/saimod_sys_login/autoload.inc +++ /dev/null @@ -1,5 +0,0 @@ -"); - location.reload(true); - } else { - $('.help-block').html("Login not successfull.
    User & Password combination wrong.") - } - }); - event.preventDefault(); - } - }); - - $("#logout_form input").not("[type=submit]").jqBootstrapValidation({ - preventSubmit: true, - submitError: function($form, event, errors) {}, - submitSuccess: function($form, event){ - $.get('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login&action=logout', function (data) { - if(data == 1){ - $('.help-block').html("Logout successfull.
    "); - location.reload(true); - } else { - $('.help-block').html("Logout not successfull.
    ") - } - }); - event.preventDefault(); - } - }); - - $.getJSON('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login&action=userinfo', function(data){ - if(data){ - $('#user_email_input').attr('value', data.email); - $('span#user_username').text(data.username); - $('span#user_email').text(data.email); - $('span#user_joindate').text(data.joindate); - $('span#user_last_active').text(new Date(data.last_active * 1000).toString('yyyy-MM-dd h:mm:ss')); - $('span#user_locale').text(data.locale); - } - }); - - $("#register_link").click(function(){ - $('div#content-wrapper').load('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login&action=registerform',function(){ - init__SYSTEM_SAI_saimod_sys_login_register(); - }); - }); -}; - -function init__SYSTEM_SAI_saimod_sys_login_register(){ - $('#btn_user_registration_cancel').click(function(){ - loadModuleContent('.SYSTEM.SAI.saimod_sys_login'); - }); - - - //jqBootstrapValidation - $("#register_user_form input").not("[type=submit]").jqBootstrapValidation({ - preventSubmit: true, - submitError: function (form, event, errors) {}, - submitSuccess: function($form, event){ - var username = document.getElementById('register_username').value; - var email = document.getElementById('register_email').value; - var password = document.getElementById('user_register_password2').value; - - var select_locale = document.getElementById('register_locale_select'); - var locale = ""; - for (var i = 0; i < select_locale.options.length; i++) { - if(select_locale.options[i].selected ){ - locale = select_locale.options[i].value; - } - } - - $.ajax({ - dataType: "json", - url: './sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login&action=register&username='+username+'&password='+$.sha1(password)+'&email='+email+'&locale='+locale, - data: null, - success: function (dataCreate) { - if(dataCreate === 1){ // reload -> user will be loged in - window.location.href = location.href.replace(/#/g, ""); - }else{ // show errors - alert('Not successfull: '+dataCreate); - } - } - }); - - event.preventDefault(); - } - }); -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_login/qq/dummy b/sai/modules/saimod_sys_login/qq/dummy deleted file mode 100644 index e69de29..0000000 diff --git a/sai/modules/saimod_sys_login/saimod_sys_login.php b/sai/modules/saimod_sys_login/saimod_sys_login.php deleted file mode 100644 index 094e235..0000000 --- a/sai/modules/saimod_sys_login/saimod_sys_login.php +++ /dev/null @@ -1,58 +0,0 @@ - $user->username, - 'email' => $user->email, - 'joindate' => $user->creationDate, - 'locale' => $user->locale, - 'last_active' => $user->lastLoginDate)); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_login_action_registerform(){ - $vars = \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI); - $vars = array_merge($vars, \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI), - \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI_ERROR), - \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_BASIC)); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_login/tpl/register.tpl'), $vars);} - - public static function html_li_menu(){return '
    "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&o.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),o.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t,n;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},n=this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(q,[W],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,d,u,f;r=r||{},l=function(n){var l=t(),p,m;n.preventDefault(),s=n.button,p=i(),u=n.screenX,f=n.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:m}),a.body.appendChild(o),e.on(a,"mousemove",d),e.on(a,"mouseup",c),r.start(n)},d=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-u,e.deltaY=e.screenY-f,e.preventDefault(),r.drag(e),void 0)},c=function(t){e.off(a,"mousemove",d),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(j,[W,q],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,d){var u,f,p,m,h,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return e.css(f,"display","none"),void 0;e.css(f,"display","block"),u=i.getEl("body"),p=i.getEl("scroll"+t+"t"),m=u["client"+s]-2*o,m-=n&&r?f["client"+d]:0,h=u["scroll"+s],g=m/h,v={},v[y]=u["offset"+a]+o,v[b]=m,e.css(f,v),v={},v[y]=u["scroll"+a]*g,v[b]=m*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,d=i._id+"-scroll"+n,u=i.classPrefix;i.getEl().appendChild(e.createFragment('
    '+'
    '+"
    ")),i.draghelper=new t(d+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(d),u+"active")},drag:function(e){var t,d,u,f,p=i.layoutRect();d=p.contentW>p.innerW,u=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=d&&u?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(d),u+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r($,[U,j],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
    '+t.renderHtml(e)+"
    ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
    '+(e._preBodyHtml||"")+n+"
    "}})}),r(K,[W],function(e){function t(t,n,r){var i,o,a,s,l,c,d,u,f;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),l=i.offsetWidth,c=i.offsetHeight,d=n.offsetWidth,u=n.offsetHeight,r=(r||"").split(""),"b"===r[0]&&(s+=u),"r"===r[1]&&(a+=d),"c"===r[0]&&(s+=Math.round(u/2)),"c"===r[1]&&(a+=Math.round(d/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Y,[W],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(G,[$,K,Y,W],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1)}var o,a,s=[],l=[],c,d=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=d.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY'),n=n.firstChild,u.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(u.getEl(),i+"in")},0),c=!0),l.push(u),t()}}),u.on("close hide",function(e){if(e.control==u){for(var n=l.length;n--;)l[n]===u&&l.splice(n,1);t()}}),u.on("show",function(){u.parents().each(function(e){return e._fixed?(u.fixed(!0),!1):void 0})}),e.popover&&(u._preBodyHtml='
    ',u.addClass("popover").addClass("bottom").addClass("start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y -}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){d.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()}});return d.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t.settings.autohide&&(t.fire("cancel",{},!1),t.hide(),s.splice(e,1))}},d}),r(X,[W],function(e){return function(t){function n(){if(!m)if(m=[],u.find)u.find("*").each(function(e){e.canFocus&&m.push(e.getEl())});else for(var e=u.getEl().getElementsByTagName("*"),t=0;ti?i=l.length-1:i>=l.length&&(i=0),o=l[i],o.focus(),h=o.id,t.actOnFocus&&s()}function d(){var e,r;for(r=i(t.root.getEl()),n(),e=m.length;e--;)if("toolbar"==r&&m[e].id===h)return m[e].focus(),void 0;m[0].focus()}var u=t.root,f=t.enableUpDown!==!1,p=t.enableLeftRight!==!1,m=t.items,h;return u.on("keydown",function(e){var n=37,r=39,d=38,u=40,m=27,h=14,g=13,v=32,y=9,b;switch(e.keyCode){case n:p&&(t.leftAction?t.leftAction():c(-1),b=!0);break;case r:p&&("menuitem"==i()&&"menu"==o()?a("haspopup")&&s():c(1),b=!0);break;case d:f&&(c(-1),b=!0);break;case u:f&&("menuitem"==i()&&"menubar"==o()?s():"button"==i()&&a("haspopup")?s():c(1),b=!0);break;case y:b=!0,e.shiftKey?c(-1):c(1);break;case m:b=!0,l();break;case h:case g:case v:b=s()}b&&(e.stopPropagation(),e.preventDefault())}),u.on("focusin",function(e){n(),h=e.target.id}),{moveFocus:c,focusFirst:d,cancel:l}}}),r(J,[G,$,W,X,q],function(e,t,n,r,i){var o=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(e.layoutRect({w:i}),o=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(e.layoutRect({w:i}),o=!0)),o&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;e.settings.title&&!e._fullscreen&&(i=e.getEl("head"),t.headerW=i.offsetWidth,t.headerH=i.offsetHeight,r+=t.headerH),e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var o=n.getWindowSize();return t.x=Math.max(0,o.w/2-t.w/2),t.y=Math.max(0,o.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
    '+'
    '+e.encode(i.title)+"
    "+''+'
    '+"
    "),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
    '+o+'
    '+s+"
    "+a+"
    "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t=[],n,o,a;setTimeout(function(){e.addClass("in")},0),e.keyboardNavigation=new r({root:e,enableLeftRight:!1,enableUpDown:!1,items:t,onCancel:function(){e.close()}}),e.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,"filepicker"==e.type?(t.push(e.getEl("inp")),e.getEl("open")&&t.push(e.getEl("open").firstChild)):t.push(e.getEl()))}),e.statusbar&&e.statusbar.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,t.push(e.getEl()))}),e._super(),e.statusbar&&e.statusbar.postRender(),!o&&n&&n.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){a={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(t){e.moveTo(a.x+t.deltaX,a.y+t.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){var e=this.getParentCtrl(document.activeElement);return e&&e.blur(),this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove()}});return o}),r(Q,[J],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onClose:n.onClose}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(Z,[J,Q],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit(),i.close()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo(document.body).reflow()},i.alert=function(e,n,r){t.alert(e,function(){n.call(r||this)})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)}}}),r(et,[S,A,b,m,h,f],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function d(){function t(e){function t(){if(3==l.nodeType){if(e&&c==l.length)return!0;if(!e&&0===c)return!0}}var n,r,i,s,l,c,d;n=z.getRng();var u=[n.startContainer,n.startOffset,n.endContainer,n.endOffset];if(n.collapsed||(e=!0),l=n[(e?"start":"end")+"Container"],c=n[(e?"start":"end")+"Offset"],3==l.nodeType&&(r=W.getParent(n.startContainer,W.isBlock),e&&(r=W.getNext(r,W.isBlock)),!r||!t()&&n.collapsed||(i=W.create("em",{id:"__mceDel"}),O(o.grep(r.childNodes),function(e){i.appendChild(e)}),r.appendChild(i))),n=W.createRng(),n.setStart(u[0],u[1]),n.setEnd(u[2],u[3]),z.setRng(n),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),i){for(s=z.getBookmark();d=W.get("__mceDel");)W.remove(d,!0);z.moveToBookmark(s)}}a.on("keydown",function(n){var r;r=n.keyCode==F,c(n)||!r&&n.keyCode!=I||e.modifierPressed(n)||(n.preventDefault(),t(r))}),a.addCommand("Delete",function(){t()})}function u(){function e(e){var t=W.create("body"),n=e.cloneContents();return t.appendChild(n),z.serializer.serialize(t,{format:"html"})}function t(t){var n=e(t),r=W.createRng();r.selectNode(a.getBody());var i=e(r);return n===i}a.on("keydown",function(e){var n=e.keyCode,r;if(!c(e)&&(n==F||n==I)){if(r=a.selection.isCollapsed(),r&&!W.isEmpty(a.getBody()))return;if($&&!r)return;if(!r&&!t(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),a.selection.setCursorLocation(a.getBody(),0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(W.bind(a.getDoc(),"focusin",function(){z.setRng(z.getRng())}),W.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getWin().focus(),z.setRng(z.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===I&&z.isCollapsed()&&0===z.getRng(!0).startOffset){var t=z.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return W.remove(t),e.preventDefault(),void 0;n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(W.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&z.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&W.hasClass(e,"mce-item-anchor")&&z.select(e),a.nodeChanged()})}function v(){function e(){var e=W.getAttribs(z.getStart().cloneNode(!1));return function(){var t=z.getStart();t!==a.getBody()&&(W.setAttrib(t,"style",null),O(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!z.isCollapsed()&&W.getParent(z.getStart(),W.isBlock)!=W.getParent(z.getEnd(),W.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),W.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){var n=z.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===I&&z.isCollapsed()&&0===z.getRng(!0).startOffset){var t=z.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),W.addClass(a.getBody(),"mceHideBrInPre"),U.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),q.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){W.bind(a.getBody(),"mouseup",function(){var e,t=z.getNode();"IMG"==t.nodeName&&((e=W.getStyle(t,"width"))&&(W.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),W.setStyle(t,"width","")),(e=W.getStyle(t,"height"))&&(W.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),W.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s,l,d,u;if(n=t.keyCode==F,!c(t)&&(n||t.keyCode==I)&&!e.modifierPressed(t)&&(r=z.getRng(),i=r.startContainer,o=r.startOffset,d=r.collapsed,3==i.nodeType&&i.nodeValue.length>0&&(0===o&&!d||d&&o===(n?0:1)))){if(l=i.previousSibling,l&&"IMG"==l.nodeName)return;u=a.schema.getNonEmptyElements(),t.preventDefault(),s=W.create("br",{id:"__tmp"}),i.parentNode.insertBefore(s,i),a.getDoc().execCommand(n?"ForwardDelete":"Delete",!1,null),i=z.getRng().startContainer,l=i.previousSibling,l&&1==l.nodeType&&!W.isBlock(l)&&W.isEmpty(l)&&!u[l.nodeName.toLowerCase()]&&W.remove(l),W.remove("__tmp")}})}function N(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=z.getRng(),r=n.startContainer,i=n.startOffset,o=W.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=W.createRng(),n.setStart(r,0),n.setEnd(r,0),z.setRng(n))}})}function E(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),V.object_resizing||s("enableObjectResizing",!1)}V.readonly||a.on("BeforeExecCommand MouseDown",e)}function k(){function e(){O(W.select("a"),function(e){var t=e.parentNode,n=W.getRoot();if(t.lastChild===e){for(;t&&!W.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}W.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){V.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",V.forced_root_block)})}function T(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function R(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=I||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),W.remove(t.item(0)),a.undoManager.add()))})}function A(){var e;l()>=10&&(e="",O("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function B(){l()<9&&(U.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),q.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function H(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),W.unbind(r,"mouseup",n),W.unbind(r,"mousemove",t),a=o=0}var r=W.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,W.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(W.bind(r,"mouseup",n),W.bind(r,"mousemove",t),W.win.focus(),a.select())}})}function M(){a.on("keyup focusin",function(t){65==t.keyCode&&e.metaKeyPressed(t)||z.normalize()})}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function L(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function P(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.execCommand("SelectAll"),a.selection.collapse(!0))}))}var O=o.each,I=e.BACKSPACE,F=e.DELETE,W=a.dom,z=a.selection,V=a.settings,U=a.parser,q=a.serializer,j=i.gecko,$=i.ie,K=i.webkit;C(),N(),u(),M(),K&&(_(),d(),p(),g(),S(),i.iOS?(y(),L()):f()),$&&i.ie<11&&(m(),b(),x(),w(),R(),A(),B(),H()),i.ie>=11&&P(),j&&(m(),h(),v(),E(),k(),T(),D())}}),r(tt,[f],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,d,u;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=d=s[l],!i.isImmediatePropagationStopped());l++)if(d.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(u=a.parent();u&&!i.isPropagationStopped();)u.fire(e,i,!1),u=u.parent();return i},on:function(e,t){var n=this,o,a,s,l;if(t===!1&&(t=function(){return!1}),t)for(s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=n[r],o||(o=n[r]={}),a=o[e],a||(a=o[e]=[],n.bindNative&&i[e]&&n.bindNative(e)),a.push(t);return n},off:function(e,t){var n=this,o,a=n[r],s,l,c,d;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(d=s.length;d--;)s[d]===t&&s.splice(d,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n}}}),r(nt,[f,h],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.ctrlKey||e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var d;return d=l,"string"==typeof l?l=function(){o.execCommand(d,!1,null)}:e.isArray(d)&&(l=function(){o.execCommand(d[0],d[1],d[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(rt,[g,y,b,E,N,R,B,H,M,D,L,P,v,d,Z,C,w,et,h,f,tt,nt],function(e,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t||"drop"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,i.execCallback("setup",i),r.fire("SetupEditor",i)}var E=e.DOM,k=n.ThemeManager,S=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,H=C.trim,M=C.resolve,D=m.Event,L=b.gecko,P=b.ie,O=b.opera;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!k.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",k.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){S.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=H(e),e&&!S.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=S.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=S.createUrl(t,e),S.load(e.resource,e)})}else S.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!D.domLoaded)return E.bind(window,"ready",e),void 0;if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=S.get(n),i,o;i=S.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=H(n),r&&-1===B(m,n)&&(R(S.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,d,u,f,p,m=[];if(t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),l=k.get(n.theme),t.theme=new l(t,k.urls[n.theme]),t.theme.init&&t.theme.init(t,k.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),t.fire("BeforeRenderUI"),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,f=/^[0-9\.]+(|px)$/i,f.test(""+i)&&(i=Math.max(parseInt(i,10)+(l.deltaWidth||0),100)),f.test(""+o)&&(o=Math.max(parseInt(o,10)+(l.deltaHeight||0),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(document.domain&&location.hostname!=document.domain&&(t.editorManager.relaxedDomain=document.domain),t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',p=0;p',t.loadedCSS[h]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),u=n.body_class||"",-1!=u.indexOf("=")&&(u=t.getParam("body_class","","hash"),u=u[t.id]||""),t.iframeHTML+='
    ",t.editorManager.relaxedDomain&&(P||O&&parseFloat(window.opera.version())<11)&&(c='javascript:(function(){document.open();document.domain="'+document.domain+'";'+'var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);'+"document.close();ed.initContentBody();})()"),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:c||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),t.editorManager.relaxedDomain&&c||t.initContentBody(),r=s=l=null},initContentBody:function(){var t=this,n=t.settings,o=E.get(t.id),f=t.getDoc(),p,m;n.inline||(t.getElement().style.visibility=t.orgVisibility),P&&t.editorManager.relaxedDomain||n.content_editable||(f.open(),f.write(t.iframeHTML),f.close(),t.editorManager.relaxedDomain&&(f.domain=t.editorManager.relaxedDomain)),n.content_editable&&(t.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(o,"mce-content-body"),o.tabIndex=-1,t.contentDocument=f=n.content_document||document,t.contentWindow=n.content_window||window,t.bodyElement=o,n.content_document=n.content_window=null,n.root_name=o.nodeName.toLowerCase()),p=t.getBody(),p.disabled=!0,n.readonly||(p.contentEditable=t.getParam("content_editable_state",!0)),p.disabled=!1,t.schema=new g(n),t.dom=new e(f,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:n.force_hex_style_colors,class_filter:n.class_filter,update_styles:!0,root_element:n.content_editable?t.id:null,collect:n.content_editable,schema:t.schema,onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=new v(n,t.schema),t.parser.addAttributeFilter("src,href,style",function(e,n){for(var r=e.length,i,o=t.dom,a,s;r--;)i=e[r],a=i.attr(n),s="data-mce-"+n,i.attributes.map[s]||("style"===n?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,t.convertURL(a,n,i.name)))}),t.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),t.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),t.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var n=e.length,i,o=t.schema.getNonEmptyElements();n--;)i=e[n],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),t.serializer=new i(n,t),t.selection=new a(t.dom,t.getWin(),t.serializer,t),t.formatter=new s(t),t.undoManager=new l(t),t.forceBlocks=new d(t),t.enterKey=new c(t),t.editorCommands=new u(t),t.fire("PreInit"),n.browser_spellcheck||n.gecko_spellcheck||(f.body.spellcheck=!1,E.setAttrib(p,"spellcheck","false")),t.fire("PostRender"),t.quirks=y(t),n.directionality&&(p.dir=n.directionality),n.nowrap&&(p.style.whiteSpace="nowrap"),n.protect&&t.on("BeforeSetContent",function(e){R(n.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),n.padd_empty_editor&&t.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/,"")}),t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),t.initialized=!0,R(t._pendingNativeEvents,function(e){t.dom.bind(_(t,e),e,function(e){t.fire(e.type,e)})}),t.fire("init"),t.focus(!0),t.nodeChanged({initial:!0}),t.execCallback("init_instance_callback",t),t.contentStyles.length>0&&(m="",R(t.contentStyles,function(e){m+=e+"\r\n"}),t.dom.addStyle(m)),R(t.contentCSS,function(e){t.loadedCSS[e]||(t.dom.loadCSS(e),t.loadedCSS[e]=!0)}),n.auto_focus&&setTimeout(function(){var e=t.editorManager.get(n.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),o=f=p=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(L||i)&&(l=n.getBody(),l.setActive?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?M(r):0,n=M(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1)) -},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),i[H(e[0])]=e.length>1?H(e[1]):H(e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;e.initialized&&!e.settings.disable_nodechange&&(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:(r.push(e),void 0)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),i.fire("ExecCommand",{command:e,ui:t,value:n}),void 0))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(n.innerHTML=r,(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?e=P&&11>P?"<"+i+">":"<"+i+'>
    ":P||(e='
    '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=H(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.initial||(n.selection.select(r,!0),n.selection.collapse(!0)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?H(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)),void 0;case"A":return i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o="mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))),void 0}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this,t=e.getContainer(),n=e.getDoc();e.removed||(e.removed=1,P&&n&&n.execCommand("SelectAll"),e.save(),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(D.unbind(e.getWin()),D.unbind(e.getDoc())),D.unbind(e.getBody()),D.unbind(t),e.fire("remove"),e.editorManager.remove(e),E.remove(t),e.destroy())},bindNative:function(e){var t=this;t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e]},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;t.destroyed||(e&&L&&(D.unbind(t.getDoc()),D.unbind(t.getWin()),D.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1)},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return L?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(it,[],function(){var e={};return{add:function(t,n){for(var r in n)e[r]=n[r]},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(ot,[g,h],function(e,t){function n(r){function i(){try{return document.activeElement}catch(e){return document.body}}function o(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function a(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function s(s){function l(t){return!!e.DOM.getParent(t,n.isEditorUIElement)}var c=s.editor,d,u;c.on("init",function(){"onbeforedeactivate"in document&&t.ie<11?c.dom.bind(c.getBody(),"beforedeactivate",function(){var e=c.getDoc().selection;try{d=e&&e.createRange?e.createRange():c.selection.getRng()}catch(t){}}):(c.inline||t.ie>10)&&(c.on("nodechange keyup",function(){var e,t=document.activeElement;for(t&&t.id==c.id+"_ifr"&&(t=c.getBody());t;){if(t==c.getBody()){e=!0;break}t=t.parentNode}e&&(d=c.selection.getRng())}),t.webkit&&(u=function(){var e=c.selection.getRng();e.collapsed||(d=e)},e.DOM.bind(document,"selectionchange",u),c.on("remove",function(){e.DOM.unbind(document,"selectionchange",u)})))}),c.on("mousedown",function(){c.selection.lastFocusBookmark=null}),c.on("focusin",function(){var e=r.focusedEditor;c.selection.lastFocusBookmark&&(c.selection.setRng(a(c,c.selection.lastFocusBookmark)),c.selection.lastFocusBookmark=null),e!=c&&(e&&e.fire("blur",{focusedEditor:c}),r.activeEditor=c,c.fire("focus",{blurredEditor:e}),c.focus(!1),r.focusedEditor=c)}),c.on("focusout",function(){c.selection.lastFocusBookmark=o(d),window.setTimeout(function(){var e=r.focusedEditor;e!=c&&(c.selection.lastFocusBookmark=null),l(i())||e!=c||(c.fire("blur",{focusedEditor:null}),r.focusedEditor=null,c.selection.lastFocusBookmark=null)},0)})}r.on("AddEditor",s)}return n.isEditorUIElement=function(e){return-1!==e.className.indexOf("mce-")},n}),r(at,[rt,g,P,h,f,tt,it,ot],function(e,n,r,i,o,a,s,l){var c=n.DOM,d=o.explode,u=o.each,f=o.extend,p=0,m,h={majorVersion:"4",minorVersion:"0.6",releaseDate:"2013-09-12",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&u(d(m),function(n){c.get(n)?(l=new e(n,t,a),s.push(l),l.render(!0)):u(document.forms,function(r){u(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),l=new e(n,t,a),s.push(l),l.render(1))})})});break;case"textareas":case"specific_textareas":u(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(l=new e(n(r),t,a),s.push(l),l.render(!0))})}t.oninit&&(m=h=0,u(s,function(e){h++,e.initialized?m++:e.on("init",function(){m++,m==h&&r(t,"oninit")}),m==h&&r(t,"oninit")}))}var a=this,s=[],l;a.settings=t,c.bind(window,"ready",o)},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,u(c.select(e),function(e){t.remove(r[e.id])}),void 0;if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){u(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(h,a),h.setup(),window.tinymce=window.tinyMCE=h,h}),r(st,[at,f],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(lt,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(ct,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(dt,[ct,lt,f],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(ut,[g],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(ft,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?d+e:i.indexOf(",",d),-1===r||r>i.length?null:(n=i.substring(d,r),d=r+1,n)}var r,i,s,d=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do r=n(parseInt(n(),32)||0),null!==r&&(s=n(parseInt(n(),32)||0),a[r]=s);while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n),o.save(l),e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(d){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(pt,[g,d,v,y,f,h],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(mt,[O,f],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(ht,[mt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(gt,[z,K],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(vt,[z,gt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&t.on("mouseenter mouseleave",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t&&"mouseenter"==n.type){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.aria("label",e.tooltip)},tooltip:function(){var e=this;return n||(n=new t({type:"tooltip"}),n.renderTo(e.getContainerElm())),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&setTimeout(function(){e.focus()},0)},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(yt,[vt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    '+'"+"
    "}})}),r(bt,[U],function(e){return e.extend({Defaults:{defaultType:"button",role:"toolbar"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
    '+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "+"
    "}})}),r(Ct,[vt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+''+''+e.encode(e._text)+""+"
    "}})}),r(xt,[yt,G],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;n.panel.popover=!0,n.panel.autohide=!0,e.active(!0),e.panel?e.panel.show():(e.panel=new t(n.panel).on("hide",function(){e.active(!1)}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()),e.panel.moveRel(e.getEl(),n.popoverAlign||"bc-tc")},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():e.showPanel())}),e._super()}})}),r(wt,[xt,g],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
    '+'"+'"+"
    "},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(_t,[vt,W],function(e,t){return e.extend({init:function(e){var n=this;n._super(e),n.addClass("combobox"),n.on("click",function(e){for(var t=e.target;t;)t.id&&-1!=t.id.indexOf("-open")&&n.fire("action"),t=t.parentNode}),n.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&n.parents().reverse().each(function(t){return e.preventDefault(),n.fire("change"),t.submit?(t.submit(),!1):void 0})}),e.placeholder&&(n.addClass("placeholder"),n.on("focusin",function(){n._hasOnChange||(t.on(n.getEl("inp"),"change",function(){n.fire("change")}),n._hasOnChange=!0),n.hasClass("placeholder")&&(n.getEl("inp").value="",n.removeClass("placeholder"))}),n.on("focusout",function(){0===n.value().length&&(n.getEl("inp").value=e.placeholder,n.addClass("placeholder"))}))},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;t._super(e),t._rendered&&(t.getEl("inp").disabled=e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,n=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-r.offsetWidth-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),t.css(n.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return t.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){t.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="";return o=n.icon?r+"ico "+r+"i-"+n.icon:"",a=e._text,(o||a)&&(s='
    '+'"+"
    ",e.addClass("has-open")),'
    '+''+s+"
    "}})}),r(Nt,[z,X],function(e,t){return e.extend({Defaults:{delimiter:"\xbb"},init:function(e){var t=this;t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.keyNav=new t({root:e,enableLeftRight:!0}),e.keyNav.focusFirst(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
    '+e._getPathHtml()+"
    "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
    '+t[n].name+"
    ";return i||(i='
     
    '),i}})}),r(Et,[Nt,at],function(e,t){return e.extend({postRender:function(){function e(e){return 1===e.nodeType&&("BR"==e.nodeName||!!e.getAttribute("data-mce-bogus"))}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(kt,[U],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "+"
    "}})}),r(St,[U,kt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",text:i,flex:0,forId:n._id}]}),r.type="formitem","undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){var e=this.getParentCtrl(document.activeElement);return e&&e.blur(),this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Tt,[St],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "+"
    "}})}),r(Rt,[_t],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(At,[ht],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Bt,[ht],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,k,S,T,R,A,B,H,M,D,L,P,O,I,F,W,z,V=Math.max,U=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=a.direction,s=a.align,l=a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(k="y",N="h",E="minH",S="maxH",R="innerH",T="top",A="bottom",B="deltaH",H="contentH",I="left",L="w",M="x",D="innerW",P="minW",O="maxW",F="right",W="deltaW",z="contentW"):(k="x",N="w",E="minW",S="maxW",R="innerW",T="left",A="right",B="deltaW",H="contentW",I="top",L="h",M="y",D="innerH",P="minH",O="maxH",F="bottom",W="deltaH",z="contentH"),u=i[R]-o[T]-o[T],_=d=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,u-=n-1>t?c:0,g>0&&(d+=g,m[S]&&v.push(p),m.flex=g),u-=m[E],y=o[I]+m[P]+o[F],y>_&&(_=y);if(x={},x[E]=0>u?i[E]-u+i[B]:i[R]-u+i[B],x[P]=_+i[W],x[H]=i[R]-u,x[z]=_,x.minW=U(x.minW,i.maxW),x.minH=U(x.minH,i.maxH),x.minW=V(x.minW,i.startMinWidth),x.minH=V(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=u/d,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[S],y=m[E]+Math.ceil(m.flex*C),y>b?(u-=m[S]-m[E],d-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=u/d,w=o[T],x={},0===d&&("end"==l?w=u+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-u)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(u/(r.length-1)))),x[M]=o[I],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[M]=Math.round(i[D]/2-m[L]/2):"stretch"===s?(x[L]=V(m[P]||0,i[D]-o[I]-o[F]),x[M]=o[I]):"end"===s&&(x[M]=i[D]-m[L]-o.top),m.flex>0&&(y+=Math.ceil(m.flex*C)),x[N]=y,x[k]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c -}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var q=e.parent();q&&(q._lastRect=null,q.recalc())}}})}),r(Ht,[mt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Mt,[z,vt,G,f,at,h],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight text-decoration text-transform color background-color border border-radius"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=n(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a}t.push(o)}),t}var r=0,i=[],o=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})});var a=n(e.settings.style_formats||o);return a={type:"menu",items:a,onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function d(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Toggle blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:d,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:d,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:{raw:o[0][0]},values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(e){a(e.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Dt,[ht],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],k,S,T,R,A,B;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),u=0;r>u;u++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(u=0;r>u&&(d=i[f*r+u],d);u++)c=d.layoutRect(),k=c.minW,S=c.minH,N[u]=k>N[u]?k:N[u],E[f]=S>E[f]?S:E[f];for(A=o.innerW-g.left-g.right,w=0,u=0;r>u;u++)w+=N[u]+(u>0?y:0),A-=(u>0?y:0)+N[u];for(B=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),B-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var H;H="start"==t.packV?0:B>0?Math.floor(B/n):0;var M=0,D=t.flexWidths;if(D)for(u=0;uu;u++)N[u]+=D?Math.ceil(D[u]*L):L;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+H,u=0;r>u&&(d=i[f*r+u],d);u++)h=d.settings,c=d.layoutRect(),a=N[u],T=R=0,c.x=p,c.y=m,v=h.alignH||(C?C[u]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[u]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),d.layoutRect(c),p+=a+y,d.recalc&&d.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var P=e.parent();P&&(P._lastRect=null,P.recalc())}}})}),r(Lt,[vt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Pt,[vt],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(e.getEl().offsetWidth>t.maxW&&(t.minW=t.maxW,e.addClass("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,e.getEl().offsetHeight)),t},disabled:function(e){var t=this,n;return e!==n&&(t.toggleClass("label-disabled",e),t._rendered&&(t.getEl()[0].className=t.classes())),t._super(e)},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Ot,[U,X],function(e,t){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e.keyNav=new t({root:e,enableLeftRight:!0}),e._super()}})}),r(It,[Ot],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",defaults:{type:"menubutton"}}})}),r(Ft,[yt,V,It],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type)}).fire("show"),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),["bl-tl","tl-bl"]),void 0)},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1))},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '+'"+"
    "},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.keyboard&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n'+("-"!==i?' ":"")+("-"!==i?''+i+"":"")+(n.shortcut?'
    '+n.shortcut+"
    ":"")+(n.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Vt,[G,X,zt,f],function(e,t,n,r){var i=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"menu"},init:function(e){var i=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var o=e.items,a=o.length;a--;)o[a]=r.extend({},e.itemDefaults,o[a]);i._super(e),i.addClass("menu"),i.keyNav=new t({root:i,enableUpDown:!0,enableLeftRight:!0,leftAction:function(){i.parent()instanceof n&&i.keyNav.cancel()},onCancel:function(){i.fire("cancel",{},!1),i.hide()}})},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("cancel"),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return i}),r(Ut,[Ct],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(qt,[vt,q],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
    '+''+"
    "},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},end:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(jt,[vt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
    '}})}),r($t,[Ft,g],function(e,t){var n=t.DOM;return e.extend({Defaults:{classes:"widget btn splitbtn",role:"splitbutton"},repaint:function(){var e=this,t=e.getEl(),r=e.layoutRect(),i,o,a;return e._super(),i=t.firstChild,o=t.lastChild,n.css(i,{width:r.w-o.offsetWidth,height:r.h-2}),n.css(o,{height:r.h-2}),a=i.firstChild.style,a.width=a.height="100%",a=o.firstChild.style,a.width=a.height="100%",e},activeMenu:function(e){var t=this;n.toggleClass(t.getEl().lastChild,t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
    '+'"+'"+"
    "},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){e.control!=this||n.getParent(e.target,"."+this.classPrefix+"open")||(e.stopImmediatePropagation(),t.call(this,e))}),delete e.settings.onclick,e._super()}})}),r(Kt,[Ht],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Yt,[$,W],function(e,t){"use stict";return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){this.activeTabId&&t.removeClass(this.getEl(this.activeTabId),this.classPrefix+"active"),this.activeTabId="t"+e,t.addClass(this.getEl("t"+e),this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){n+='
    '+e.encode(t.settings.title)+"
    "}),'
    '+'
    '+n+"
    "+'
    '+t.renderHtml(e)+"
    "+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,n,r;n=r=0,e.items().each(function(t,i){n=Math.max(n,t.layoutRect().minW),r=Math.max(r,t.layoutRect().minH),e.settings.activeTab!=i&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=n,e.settings.h=r,e.layoutRect({x:0,y:0,w:n,h:r})});var i=e.getEl("head").offsetHeight;return e.settings.minWidth=n,e.settings.minHeight=r+i,t=e._super(),t.deltaH+=e.getEl("head").offsetHeight,t.innerH=t.h-t.deltaH,t}})}),r(Gt,[vt,W],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.submit?(t.submit(),!1):void 0})})},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Xt,[W],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
    '))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N,E,k,S,T,R,A,B,H,M,D,L,P,O,I,F,W,z,V,U,q,j,$,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,dt,ut,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,kt,St,Tt,Rt,At,Bt,Ht,Mt,Dt,Lt,Pt,Ot,It,Ft,Wt,zt,Vt,Ut,qt,jt,$t,Kt,Yt,Gt,Xt])}(this); \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/entry.tpl b/sai/modules/saimod_sys_text/tpl/entry.tpl deleted file mode 100644 index 8cc45f6..0000000 --- a/sai/modules/saimod_sys_text/tpl/entry.tpl +++ /dev/null @@ -1,4 +0,0 @@ - - ${id} - ${lang} - \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/lang_tabs.tpl b/sai/modules/saimod_sys_text/tpl/lang_tabs.tpl deleted file mode 100644 index 489279a..0000000 --- a/sai/modules/saimod_sys_text/tpl/lang_tabs.tpl +++ /dev/null @@ -1,9 +0,0 @@ -
    - -
    - ${tabs} -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/langtabopt.tpl b/sai/modules/saimod_sys_text/tpl/langtabopt.tpl deleted file mode 100644 index df660f6..0000000 --- a/sai/modules/saimod_sys_text/tpl/langtabopt.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • ${langs}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/langtabs.tpl b/sai/modules/saimod_sys_text/tpl/langtabs.tpl deleted file mode 100644 index 64f246d..0000000 --- a/sai/modules/saimod_sys_text/tpl/langtabs.tpl +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/tab.tpl b/sai/modules/saimod_sys_text/tpl/tab.tpl deleted file mode 100644 index c4ef8cc..0000000 --- a/sai/modules/saimod_sys_text/tpl/tab.tpl +++ /dev/null @@ -1,8 +0,0 @@ -
    - - - - - ${content} -
    IDCategory${lang}
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/tabopt.tpl b/sai/modules/saimod_sys_text/tpl/tabopt.tpl deleted file mode 100644 index db32e5b..0000000 --- a/sai/modules/saimod_sys_text/tpl/tabopt.tpl +++ /dev/null @@ -1 +0,0 @@ -
  • Group ${tab_id}
  • \ No newline at end of file diff --git a/sai/modules/saimod_sys_text/tpl/tabs.tpl b/sai/modules/saimod_sys_text/tpl/tabs.tpl deleted file mode 100644 index 00cd6b6..0000000 --- a/sai/modules/saimod_sys_text/tpl/tabs.tpl +++ /dev/null @@ -1,49 +0,0 @@ -

    Texts

    -
    -
    - -
    - ${tabs} -
    -
    -
    - -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/autoload.inc b/sai/modules/saimod_sys_todo/autoload.inc deleted file mode 100644 index 033c876..0000000 --- a/sai/modules/saimod_sys_todo/autoload.inc +++ /dev/null @@ -1,8 +0,0 @@ -next()){ - $row['class_row'] = self::trclass($row['type'],$row['class']); - $row['time_elapsed'] = self::time_elapsed_string(strtotime($row['time'])); - //$row['report_type'] = self::reporttype($row['type']); - $row['state_string'] = self::state($row['count']); - $row['state_btn'] = self::statebtn($row['count']); - if($row['type'] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){ - $row['message'] = str_replace("\r", '
    ', $row['message']); - $result_user .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_user_list_element.tpl'), $row); - } else { - $result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row); - }} - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_user_list_elements' => $result_user,'todo_list_elements' => $result, 'count' => $count)); - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_dotolist(){ - $result = $result_user = ''; - $res = \SYSTEM\DBD\SYS_SAIMOD_TODO_DOTO_LIST::QQ(); - $count = \SYSTEM\DBD\SYS_SAIMOD_TODO_DOTO_COUNT::Q1()['count']; - while($row = $res->next()){ - $row['class_row'] = self::trclass($row['type'],$row['class']); - $row['time_elapsed'] = self::time_elapsed_string(strtotime($row['time'])); - $row['state_string'] = self::state($row['count']); - $row['state_btn'] = self::statebtn($row['count']); - if($row['type'] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){ - $row['message'] = str_replace("\r", '
    ', $row['message']); - $result_user .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_user_list_element.tpl'), $row); - } else { - $result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row); - } - } - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_user_list_elements' => $result_user,'todo_list_elements' => $result, 'count' => $count)); - } - - public static function statistics(){ - $result = array(); - $result['project'] = 0; - $result['project_count'] = 0; - $result['project_all'] = 0; - $result['data'] = array(); - foreach(self::$stats as $stat){ - $data = \call_user_func(array($stat, 'stats')); - $result['data'][] = $data; - $result['project'] += $data->perc; - $result['project_count'] += $data->part; - $result['project_all'] += $data->whole; - } - $result['project'] = round($result['project'] / (count($result['data'])),2); - return $result; - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_stats(){ - $vars = self::statistics(); - $vars['entries'] = ''; - foreach($vars['data'] as $stat){ - $vars['entries'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_stats_entry.tpl'), $stat); - } - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_stats.tpl'), $vars);} - - private static function time_elapsed_string($ptime) - { - $etime = time() - $ptime; - - if ($etime < 1) - { - return '0 seconds'; - } - - $a = array( 12 * 30 * 24 * 60 * 60 => 'year', - 30 * 24 * 60 * 60 => 'month', - 24 * 60 * 60 => 'day', - 60 * 60 => 'hour', - 60 => 'minute', - 1 => 'second' - ); - - foreach ($a as $secs => $str) - { - $d = $etime / $secs; - if ($d >= 1) - { - $r = round($d); - return $r . ' ' . $str . ($r > 1 ? 's' : '') . ' ago'; - } - } - } - - private static function state($state){ - if($state == 1){ - return 'Closed';} - return 'Open';} - - private static function statebtn($state){ - if($state == 1){ - return '';} - return '';} - - private static function trclass($type,$class){ - if($type == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){ - return 'success';} - switch($class){ - case 'SYSTEM\LOG\INFO': case 'INFO': case 'SYSTEM\LOG\COUNTER': - return 'success'; - case 'SYSTEM\LOG\DEPRECATED': case 'DEPRECATED': - return 'info'; - case 'SYSTEM\LOG\ERROR': case 'ERROR': case 'Exception': case 'SYSTEM\LOG\ERROR_EXCEPTION': - case 'ErrorException': case 'SYSTEM\LOG\SHUTDOWN_EXCEPTION': - return 'error'; - case 'SYSTEM\LOG\WARNING': case 'WARNING': - return 'warning'; - default: - return ''; - } - } - - public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_close_all(){ - \SYSTEM\DBD\SYS_SAIMOD_TODO_CLOSE_ALL::QI(); - return \SYSTEM\LOG\JsonResult::ok();} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_edit($todo, $message){ - \SYSTEM\DBD\SYS_SAIMOD_TODO_EDIT::QI(array($message,$message,$todo)); - return \SYSTEM\LOG\JsonResult::ok();} - - public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_todo($todo){ - $vars = \SYSTEM\DBD\SYS_SAIMOD_TODO_TODO::Q1(array($todo)); - $vars['trace'] = implode('
    ', array_slice(explode('#', $vars['trace']), 1, -1)); - return $vars[\SYSTEM\DBD\system_todo::FIELD_TYPE] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER ? - \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl'), $vars) : - \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl'), $vars);} - - public static function html_li_menu(){return '
  • ToDo
  • ';} - public static function right_public(){return false;} - public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);} - - //public static function css(){} - public static function js(){ - return array(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/js/saimod_sys_todo.js'));} - - public static function exception(\Exception $E, $thrown, $user = false){ - try{ - if(\property_exists(get_class($E), 'todo_logged') && $E->todo_logged){ - return false;} //alrdy logged(this prevents proper thrown value for every system exception) - if($user){ - \SYSTEM\DBD\SYS_SAIMOD_TODO_USER_EXCEPTION_INSERT::Q1( array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null, $thrown ? 1 : 0, sha1($E->getMessage())), - array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5),date('Y-m-d H:i:s', microtime(true)), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null,$thrown,$E->getMessage())); - } else { - \SYSTEM\DBD\SYS_SAIMOD_TODO_EXCEPTION_INSERT::Q1( array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null, $thrown ? 1 : 0, sha1($E->getMessage())), - array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5),date('Y-m-d H:i:s', microtime(true)), - $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), - array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null, - array_key_exists('HTTP_USER_AGENT',$_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : null, - ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null,$thrown,$E->getMessage())); - } - if(\property_exists(get_class($E), 'logged')){ - $E->todo_logged = true;} //we just did log - } catch (\Exception $E){return false;} //Error -> Ignore - - return false; //We just log and do not handle the error! - } -} \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/stats/todo_stats_gen.php b/sai/modules/saimod_sys_todo/stats/todo_stats_gen.php deleted file mode 100644 index 453150d..0000000 --- a/sai/modules/saimod_sys_todo/stats/todo_stats_gen.php +++ /dev/null @@ -1,12 +0,0 @@ -name = $name; - $this->part = $part; - $this->whole = $whole; - $this->perc = round($this->part / $this->whole * 100,2); - } -} diff --git a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo.tpl b/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo.tpl deleted file mode 100644 index f2d4bae..0000000 --- a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo.tpl +++ /dev/null @@ -1,16 +0,0 @@ -

    System ToDo

    -
    -
    - -
    -
    -
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_new.tpl b/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_new.tpl deleted file mode 100644 index f122f54..0000000 --- a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_new.tpl +++ /dev/null @@ -1,5 +0,0 @@ - - -
    Message
    - - \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl b/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl deleted file mode 100644 index f688d84..0000000 --- a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl +++ /dev/null @@ -1,26 +0,0 @@ -

    ToDo ${ID}

    - - - - - - - - - - - - - - - - - - - - - -
    PropertyValue
    ID${ID}
    class${class}
    code${code}
    file${file}
    line${line}
    trace${trace}
    ip${ip}
    querytime${querytime}
    time${time}
    server_name${server_name}
    server_port${server_port}
    request_uri${request_uri}
    url${server_name}:${server_port}${request_uri}
    post${post}
    http_referer${http_referer}
    http_user_agent${http_user_agent}
    user${username}
    thrown${thrown}
    message${message}
    - - - \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl b/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl deleted file mode 100644 index 21a2e41..0000000 --- a/sai/modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl +++ /dev/null @@ -1,16 +0,0 @@ -

    ToDo ${ID}

    - - - - - - - - - - -
    PropertyValue
    ID${ID}
    ip${ip}
    querytime${querytime}
    time${time}
    http_referer${http_referer}
    http_user_agent${http_user_agent}
    user${username}
    message
    - - - - \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/todo_list.tpl b/sai/modules/saimod_sys_todo/tpl/todo_list.tpl deleted file mode 100644 index e2c195d..0000000 --- a/sai/modules/saimod_sys_todo/tpl/todo_list.tpl +++ /dev/null @@ -1,29 +0,0 @@ -
    - Rows: ${count} -
    User ToDo's
    - - - - - - - ${todo_user_list_elements} -
    time agomessageuser
    -
    -
    Generated ToDo's
    - - - - - - - - - - - - - - ${todo_list_elements} -
    time agoclassmessagefilelineipurluserquerytimecount
    -
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/todo_list_element.tpl b/sai/modules/saimod_sys_todo/tpl/todo_list_element.tpl deleted file mode 100644 index ee9c842..0000000 --- a/sai/modules/saimod_sys_todo/tpl/todo_list_element.tpl +++ /dev/null @@ -1,12 +0,0 @@ - - ${time_elapsed} - ${class} - ${message} - ${file} - ${line} - ${ip} - ${server_name}:${server_port}${request_uri} - ${username} - ${querytime} - ${count} - \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/todo_stats.tpl b/sai/modules/saimod_sys_todo/tpl/todo_stats.tpl deleted file mode 100644 index a848342..0000000 --- a/sai/modules/saimod_sys_todo/tpl/todo_stats.tpl +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - ${entries} - - - - - - -
    NameCountAllDone
    Project${project_count}${project_all}${project}%
    \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/todo_stats_entry.tpl b/sai/modules/saimod_sys_todo/tpl/todo_stats_entry.tpl deleted file mode 100644 index aa258bc..0000000 --- a/sai/modules/saimod_sys_todo/tpl/todo_stats_entry.tpl +++ /dev/null @@ -1,6 +0,0 @@ - - ${name} - ${part} - ${whole} - ${perc}% - \ No newline at end of file diff --git a/sai/modules/saimod_sys_todo/tpl/todo_user_list_element.tpl b/sai/modules/saimod_sys_todo/tpl/todo_user_list_element.tpl deleted file mode 100644 index e37d0b7..0000000 --- a/sai/modules/saimod_sys_todo/tpl/todo_user_list_element.tpl +++ /dev/null @@ -1,5 +0,0 @@ - - ${time_elapsed} - ${message} - ${username} - \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/autoload.inc b/sai/modules/saistart_sys_sai/autoload.inc deleted file mode 100644 index e5dbfae..0000000 --- a/sai/modules/saistart_sys_sai/autoload.inc +++ /dev/null @@ -1,3 +0,0 @@ -|;&l%&qe-H+1WbeK9D$knFobw^>g|0d!88aCX5fP=P zhT2OaqHBj&KetGLmi`IUd*Bzz8!dG;qD>+K5z)ie7u!I~ZBGpoA0i@h`m3L7L|HkE zKqINIrp{B+c@i>)2e(sIga&{nHs@EyzN#J|kiEMv@Fx+Gs<*w3ue}{7*xA>KQ(aT% zg`JQ+DG?DTk*3-|uL5Sa=fF*OkHQIr$((t2;aM$=p^C~A+Nax!x4W{cH^Bw2)vo?? zA2p?V-KDZhowNV^ntt$1M_cr|iXy?w{IGgjXW4W1dmU&=VH4au_pbsO-Q z8$3S^F#ku!ekjLg9(F0}hJ@47(k2ncL*#DWzki?17x+v6%ZJ$5*y|Q*YHD}Z|1BHy zRT%!?uleuLxOE4ZIlhsnz|@5c{ZCW(@7MUR75ZOZ^WUMd+<^1`{r_t<(%x+NpXT%5 zukl|I=fAw>f8Ury@VPE`^WYyFq*SzxH4=VKz;ubk=UY9!id2LS8>&i&LFN!84mhY$ zd6iv0@WAfzV}8VFh;jYx1RbWU*%@T{|*2r(etb~jRNL*8JR)Y@L z$W9w)omTtYPp<62G2mYJlQ@|_(vd}7<`0|6KAsH`X(0_|$X7{k{l=2#(^2Era}OfO zuqO4XhAX{)6ot~0gLYMy;w0{03UjG7p~p@e3CbNS!d0I7yYhS&+XQ-46tLwl(eCk6 zr!#e-hbrAAZQ1vx-O|j3Vw|&#)1vH6>^-tDzVxAW?|#D$W|h&Dv$uB(LSG}{RRaA` z(LFT9XE6Cs!jEeNcT_meE6v{deIeh-D#2f{dRpf8=YGbJ~{|r7#4lY04>>ic~nv3gVqgEf|+Gp z+dB;ruxLm@=qb-p`oV^AE$lJivbSSc$WL6aL(OjBelCJgcFmEIgx{$AYi(`nIi?k6 zEfVmDnXKMCfn2!h)76!1Tl(cBg!Hj2E;8R!Wtz1@Y+tj^CtW^cxK0-{g>N=qMW&yf zmBumIIXj)5&5 ziz{+ISQQS-^p*RF!YJRbl#`P)hPyE}H#fWQ^ar}jLD#gb&gkGE`dc?HOC?vb30RWy zOZEIZfp6;CkqXzR-W8SlK zBzD&y&$wnvIMbnXgN2HmKliWB{u7URy>P}^E${)j$5^43Nxk<&I4Joz7oYDLotw*k zPtbHlx9afx!k(OTez@WV!_9_}g`c&xqx18-QgP{982@&z)aN!quIo`*^#+Dumn~WH zH&u)<0v>&e5bdy*92s+tY6fmj&107qVOw4yG>jD#=KWI8~(hmMa41O@bAO7Hg7?Qxw%0d={Yr_bRX4=VSQE1R#o6$ zOWvOt%l;~E%8*OW7;uH%`5BUlk?~7oW46YFCCIVzk<2V^XUldtSJ6E5XuQC~&vKIDNFzWO^#qYCpYcx_PWPJ($MH_$vW%u*6p;0FfbwerT@{O{ktf4ldu zRcY<(>$`^to<9|(T}XrdRu0?c$jb5T!Je^XAv;Zi|CK_Vi?m4^-k+LwNzO5fPzVp73Yzr%@1 z*LQb?TzF~)J^;P`wNE=g<-<&`cfpmXL4hQJaY!kgSL{kO%+Fh14<`clz8n44`Q6R> z_&DbxQ6GJ`-__MBEv*d|6^R-T-Z^JIwIB;~(~z-gfm{S7C|?G&j|z;=Ovkf@DRCED zXh@7|iT8f>BKVED}uzl6Ox-L%baiVPV3q5#RQ}sovu0;4cxxq*OFyQL)bo z+^r6dcaR$!8(fU#zeRpC={Z~rx4wgf1Jk~m>6mM?ztp+wL)r1At}gxV4@mFGJ}Tk` zMgNU38q2^H*tHBfzsI4Wp|1=LZL)ZZobL(hm>fjCzr@0zBo|^>Ca*;&~zzb75)5JKulWvYa6A#GLeSB7{xe~n)2P7prxoh@VL=oAPyXaLyx}Xcqi3r5;PjLmPARE_ zkioweADv>KnVE5Nb9<0I2pr)(tKJF(JeHAUKxw%#W4g`uck~%8`LzgNxxveeb4{M) z2XwdZC*5kZ{-l#FHL7r?J&={WE_~Q}9x~$R#7#ucqs^H;m;P z2@{D7*Z=!@5xWTI0gi9yEcL^@>?pcd8yfhrW#GvA$Rb^B*Q-hNS7LbaZ$Iq8ogZBT ztJ!I!Bws|2Lrs%gZE#yG8yLw%nV~XQLUNvMqRr-KWCS?Ow!rC*@b zK61urJ48i)>68IX#t>WoCqk|`P_NTHwKQI`j(4(AtY;ry>^;-y^xe@?086~~QSj?V94Bs}KsypHWu%c=Vm0xyZ^I*|DjWk8XYJYkoabb?K z{KX-HNzCpRfFujB%@O+vw|rU?v!WLnTU18t-*=I!3Ncc=w6GZLOXa_M!Y7V6!iHX$ zoRv(U!<;QY!#4nF4Tr3WtI^B8q2#SP`Fwt>^E){zY7kkW*jAX1&xLv%e{#d1Qy!v4 zZQ5nP1L5{2ZZkjQV%URXU!ndf|FwdSXNCEai|BIkuu`=yAEor#&5je{c97iwblHin zL}7p>PLKgGODif&jetEn+M539jG&GB&Lr+25`652GtTi0E2g2maa~&(A|u>n8CAEW zEJCwDjZ^5DYzg5`O-=nfG4ayGWaA!5B0MV(q&iobITbTuZE`PM<*lcTHgNbnE={=? zaAz9`F@z**Ox=MbhTCO*s7d1BVomqNac5}(tlGTy1B-)$eA?8NJGDG6({?*p7-e_z z@ve3@v!%n8_JfH5z7me*kA*xFc^zZ_Pv{_v?{Nq$HSx^&pcf|U zy?OH|ywu@n)9?xr&div4*Rw|3RGxK?8I`*xEqmGL<&AC2<(Nycol=Hdr?y=6zPo zB#D)4uVSvVKI-bjcv~ZmWY4TNOE~(MW}V7KYhwz@kbAGK%XXP)&&48wC+c7id#1*w8c3* zwbF$iW)B_+6Apy8r)y$@G0iwWoh=#)=E(bZjq6#v2Ne@sFV~odl+NAokXAEBuc1!q zmVL^WgVc&&!-NWPLW^A|ce1qQyo!~cvXNEjk^Ve_4|V9F%E#)6fD7gX@7Am1{q83% zOgqBtH~*IGo`$qK>Rcr~ilP(|DY8?MmUlLft*rtl=+|W%0|aqn*2DV7PF*7FJ39|( zLy7sNuZg>cFA}r7G335xT<6Y~Zti^>SdRVGQ!SzL-7tTlIML#f>EtljqF?Ju36lNm zmi5iDMrrXkGu_676J^@>H#7@h+KDj%v&_cEcJd_kXKk~ZRIpO`3z`nn7`QT}iVQ1H zk_HV`%$z5XT__w++0KSw2NllN3r@dK+$eF+(B_-a=FFf*m8-H;4hWRA5Qm&2QETTY zf|Bw{8@0?xPP(LtVtKM|N775g8^<~`Gxo}B z79&bcYN8)%rQNXzyIZ?lS<1R-%r>efE+rLio#T|BD@y+(Q%q3vzKc))Fd>&?9&h2^ zv}h(^{%Zs@2dv5_Ah{s=OU>4s$p9THD&y#K3?MJ#@$i_@oWdZ%I17ofwVqe?Kw@>wFg4iM23H36;( z6TH)C{x)5SXQ#xAV^n&``V%sjxxqg55s}DAMo1;2goH%pV%ffc@!!tlW)?=VO=AJ_ zXF9EsM~Pv%ep?esgATy^0h##)wSeuxfKAi5)P0Vy%LnqPslm067AF_bL%4_i;Q+OP z{tmBY>VxFoU&En$ZKSdre~DaQk1toi$p+^u2|L~4c=IKjj_7*s(@t+1acHNhX( zwHD^(wS`&~XV%Yx7s%DVIhWcTB{$xB3VKP*<1=)2jgp(;rHOK!M$_l{gyuu=PLU6a ztSgMKv&sO2cC~U{*0O5IZD^2_j;Cgm`(vwDy7KOaa)hwb%tgyP+JNIpN8;0e-lkjl zGgTSK7ZvfixVn~Hfe^_dQPbCul6fHb3DvLAffu0~4?YtFqG6K5yY|O{tqW5%IuspU z9PvH`a7+ydDJ4CiK71n6opbUK-^N%wXuIyVQ=E_04GInhP6PUA8=4=iZHEsD&t+b# z&s9>}n3&v;~F%?E=oW zM5Qyn8r^S&h4y>~(dhG}4;4+vbd9 zC5Z5%6J_{|x2p11OA86b8b@{EP{Pk~9q|lrd~Lk)?qexMFn4zDIf-y9UM$@TB1^5X z_f~#n7g_|q`A%P~M5N_QXWqq5&KV)sb}Ev-3YtkQ_2+R6{SQ{%i`bjnn;LYk@=>-* zKu;PmN)gex#5eg>@5jlaDIZhWZt6SQGnMFqA-`dYazPomn2K)I*Qc_X^+vYR)Z84vc6sLQnB&|M!O^{3VQd(aPa%ZI#_Z+pSL6Kpi<6Tpoq7S1ayjAE;}_&h2u z^w6|1qtgeqw1H9_u1Bv-s)enl9{D<&YVtb%iWx`MC;NuA=+zY!b(KA>gToK-eY_cA z{yC_*bGD(Atsi@*#C9(g-2&F0QMsKfLSw*p1fN|OvF&a38ql<|*_D+B0?nXS*olPe zMCl?!>&Z<93t!r3n_rkDWzxG2k? z^#V7uUZody|JCu1{h)!eP20Ph@$8CO8V}lmEJ7CdE>oc!EZG;XP8A0Bg7%oe64V~QymJWd>CF^p&mQ+Bk zj#=q}<^Q-=pRR&*oRE#tFe`@N@PX^ZiUN}WnZvg)nehKi5Qp8 zcMNB?6(q&j_ZD_-@Cy0)lV(2s;Yj0=(Vf87FRGI)Js%L^`JijYP-!hk9wlgg=;y{e z-N@mV9f)14&+eQJL_;M$BD>0m&NIE1L{F|?^Ul0>6&hmdE;3$OCEUa&g453x0`@p} zpuw5qSQ{$#hELJ728`0@&;31`K19gpE&{yCo8He4-Iast^%v7_s&)-=EAAz3&mM~6 zD2B8A1n7Aw3(IPB~$QoT>RvLDQgn6J)JXAg|*7jDe~C=d?_ zmZfF?Lnouh-7v3k&zsocoM-3+R@<(4t|W~+Iy*itbL!;29vpk4WRXM;RQD|RwBV(u zv~1^=4w$na8IW0tC!s%_kcj8@J5KG-(#D5RO@bhKYt$=Zp+wp_GD)Ka>IPog? zYj3;sc|`&jB{O7u9L}biHiLax0}9=wQ|wo#8jg8)2^>C4>HFvT?&*X5)L~Tp3f`1& zS~=)aPcaR?6OjN^ooDc9Zhj}v5j~&VwkPCxDt6KdI(_84dhfkgdjsFdqj}I^;1io1 zTDXNm@tg<+09Xd0bvkx!-LDU}zu$HrtZi^6VZ7$Q)2BCSTJ`2;nmur&L;Ip>-7Jp` z^9#JPk+Fk zi0u@HBmv-JXwwZIH=cnybB{xg7p zL<~0JQ+g@lGlE3pzQE?^TJwQG4{+6&r!Ye1RZjdMS<}5?gNHqMTQubI6WZtW8=F|< zZif`%P|wO&{Y+l)(GdEwR}a$uqoO6~Pb)*eHez;mpp(H$8w4st{$wYM(s)1@&ni1+ z@fID?l$8sp5@B30YPz?ECUhfrjHXnhYQ@FukEQFNQE$j1-pwf;ex93n?-~%rgUX+2 z?gUWuuf=GVUm@nwdWvC%=Sq^Q4hvYL&)UZavp&OB{yQ^xuczN{-LRRAMvWk$EBWO2 z=s$GItfoA4Q~t!2zQIcuzkfUw7_#}kV($O}(MGI{v~{TQN9!XM-uu!Ci1!~GL8w&h z?F-H1>jXZ0WI6L$c+A?{fL5bW3kJQdF8 z@w7(>U7;JkuhQ_}|8FlqidPMR1HeyRf_1a)AEoCt5Q>#cP6son}?~l(!!$caO?nAN;pg;{Eoa$AKSg` zZk-#j^h8=FhMGec;NYQ9=r*bqmdbB*u=GLrr9SO4HTAseGc{T0up%2(S9F93?!#l;06-Tb_9 z%bJD0&@ss^!nTK^o99{{RD^7F#I(};MvwKrp$GPBiLo;`X`pWX!EdK`T*o%@s; zA1e_t6-f3Su!Fn#QI!YoqUXhtIwGI>Opk`p{lZhk zo&ZxL?mjDXH8T|z#rgT|PH zf>Tis=i6yHJX-XJQyQ*OaGS4F*G;wTKcvF!dNbVhZby|!a+rJ~6LIKsYabN><`P)@ zqaz~=(Us!5oOE$bs$A3Rz}N!){5v_>XiJ*|^OV6mPBW+gSwfgZkCu8xdURvW=Twj? z9pj!vVWaX8f#s7xr0Wlk2>v2QC%+ zM8rV~aD~nyBP-kX$Pfd_1JSRZ3Q|g8u`T5mf8K~@WoO@xdIFpQfY9^7-t^Uko|loA zc#Y?_Giu@Ygt}-5gu?36%vy;7eOa#H-wpIZ~<79WPuxB&?ffWTrTQ2;~* zZKzx-kj;!B9wZZ_Ni#2G7`rg#v|2sUwx#6!BqI9 z0zNX4v}vfexOUexe5o1L1(q`-70vsJ6lgeYoEi{?0mfe+$UjJegwpvXTF(=h*ON3N z-@hjVgrC`a9GLsk^Y4;@bGolu;D-};V!@7?yUD#pPe%Inha6M$G+>uSU4x)5`t_93 zJLpjR8oL+faFNF?PQt#nBC|FAUL3$}m$z$%*V15+kIrpSyU-7})PGcJGfM3P6B)>1 zR_A_`_<9=|v-(GSWCNicE*MS8(si=G420AxD6BEaq=5BrDfvC%U$a`<45S2A0B9vj zP&^6}d$dPNX$e`!5^3iuWLk?D{}g9=E4*ORB2H@S5RxN`5biHd7nKpLkam8f76VW| zz45t*#u((#s=70a(i_8$jM{aMKzuI4)#Tw0hvx2|zK!jC^Jm!$9O{V~`)0WqK-s|y zRqwtuVq|3GOnvT!-|xn55t_1d_YC4Qd^Z;aBHWZS-QEKVOr_t}>&>mLxvkY!dG#3) zPMY^Gc1uQ`Qh?wWZ3mnqjp+^aoj5P>(*Ja zGq?)$$ZmQMg>N{>*1=#v_MG(L!vcK0pVXw+P%-^Ca^1|QwbGw5&$iEbM-|zsf z7r3-@wO8Ryk*R+4q(6e;gX+>Wvv$O<`8U3( zq8J60W6+VPuXX5ny9>wfVVn^~_0raurd2!e2NusuPPdR_GuHVF)}uky3?;&YtY^b- z2<600`(uco98=L2Q)hqC;@?U&MIdL|UD{?EoN^S^jf8KNz9jEtBgUI9W{2JhTTc6a zKE4n}hgp5geEs_M!4$E_%kjg9F4;wNKUm*`IzCnLM%a%c5FJBM`Am6mc_SSvcy7AX zmy#G6?bgt`eT2TF3!J`H#si?UVRWYydOeTT85f~2H8Ydl_{k|9+8FRq+M{Sj<>3p1 z;Mm6i|7iMir=)~MT?m~8f3!(m_sH_coPc=W9K6p1wpo71XpP6z(4_l=o`9{|8hAkF z)arnxR@>r+N>jVuV`sVwW=%a;Y2xN{Q4v7e`;JtXwdkmuRb*%=78chJDqT@&$`R{-S2Vi-h@utz=8g1c*K_F8N+BgBR; zD^}EdChBLCmvDc&F!~+2kY{?2-!s2-Dv+-9_QViQIECuHqN$ZW~{FGGw1JBpxvTTEH{qc)wxzVN|gO zu;-l|u}!YhDMqRW6#g86@k14b=-JbODn<$p<<)PJhu#&%B7m}p*B{(DwW1^;3wN15 zMSgz@`JIJ5&j}NWpHuREem112JVfQn)Hv`{vN7OQQ;l)Fcwh5uxtlwv+OAfRSKxAO zvvsu`HBX$)u`q==2+!5(I81JNj%%^10-p;x>SuH`gRjwMCF_>`s%nJZ642z%fg%lupvf)`}Yb#H9+H!T@=3*T}q$4LsYn zr56?jP%vF^&g^J7vK3&&N->VocG#vD@Czxk?aBy9}uFH>~V$gb!@o zi8WB&ycsmmu2;TiOL=M1$h&<`F6oQw9wNwDuVybL&nx-zbL?ie!|chBC33ArTCVH! z9KoI)X{CxM1pmw|eHqp+61n5n%>*@RAF1x#Ge4f(J^rD~Z3j2<8CP5EN|2E z{Hk>Y#-}L|8{l%vEO(604KW7SO3UBo9 z7S~Hm&$T1B!V;8;(r!x*lFJ-*9DOa500>sV;u5*G<`7NIF%(P7%_!^rz_vTVejr1X zG5Q~|%#{TB-35Bs$&D*6s>-<337hVuFp$$(yiBe(H!QdFr}cV=HD;ESSS#%X-fFMedb>^AbAX^eVtgGF^S<@Gh_Ih5Y`Q z^2q3fmLm?LblR(T<&UA_P%{6k1~R$V=)bd+YGi4%F;)mD6Q3etsPd&N9Wm6!fRjkl zbz;TLgN%H;$?@67IXVC|&K%T8GQaOEi&*=efZo`e@l)$~E|tBux7cx&rzi#=R|ezU zO-)UKW7(5*E$&;i5Qb|&@TI@fPoK4gCeKEi`J&>kT?&ZL6PDrSJ-p(CzRSA5m$+gs z57_ZW@Wf-w$Nqc9Kp-00-KR6VT^lQh~O%3-68+Ijl6(vh_4uPt@1tgNi} zMR%E^+rTYYHh>9|vkYGPpe?ie_RG zAI=^gjyp58+o-TF>l6X%rssgvR7I2QsPkrv3YIOg0Wm&^Q#TI8-MnJF0MqwJK&DS{ zlISb9@EDb^49{)hUPk&-aLe`oI z1=RC;Jw<#@kW&5jPSdaLmsD)#-JR){1AluB=B~%tFxu6aSO)J%0^Hm-Btb($MJU@U zOfmI&>JCEL)CW8I`pedqmhE(9@ba8Cek3)c9)I)_A(54pM|{W@t8Zcw2SQ#E-&Z;= ztDJAFS51W-K8L*bt6Kv6$r!DT3j^-d*dcnbqV&Nu4AMQUuP^$(*+copsFlc8Jj<+Y z={Kgnj7KKBmdD&w9KUy7e*1Rlv;Wj+4;+RA@7`;|bRVh!TrlJGeb+bImPPoApPgh zpL^|d4C3fgjChbk%W3F#RXR<=>ni_KNnbd|0T3`tO>4hzOHRma-ryN*O`{wR$u$S^ zEjhW_q6_6Hz>V-(OK7>57v?ah3bUDsGkUXT6joT{aqVK!G4>-Qa|cO{UAT}pZaxq^ zJ3l~&0A9e%p9?;Kyuc^#(wrk$f%#Hr%j>6OJ6pfCaXADQOv&-Y(?L!m%+`Z0vj-G~ zIo2KS4gEUvo53mdCk&zrYwgRv9!tfCISCB#-)&%fD^mJ{>W* zr3;#4y5V;1;Rf|~3txBkVq_wCF`4OOeSQ@JK(5W)ook9tI7@bLtrcsTF zlKr_ARUHb2XWC-S`mbfk`tY<_kCf$|hbV2giG_#2noQ zzjdEta9J0C0<1qAPgcm80tcc_LQbDdWdFd}bY~?d>lOpnG_T@~X2e(n;I(Ed%`=M# zcV}=J+$EB26uBs+fot-&zRX#r#C{IIQ{L=?D}E^`0za!+pDaj$;;b1SQ^ z@XKM5D^lvppEzL__Uv(UdM;e?mGnnXm?PuJG!&H{0+6%2V_CX{`kKi@!1j1;eX5QM zrmWUu7B2B+YcM_FbWy#xka8_76rzv)Nxxp??A>|Sh~`6Qz)m52wv+X#HyX4$D?Zzs|wyCQYddeC&ZMv@I7<3|;wL$1i7BlhZ?t%&cglP4W=$oic~1KhqT1 zGV;ow#`?n8J4i#J&i*Zz!E(3?$Kf?njpCUqZ`rYppN*}J^y_(^IVw(-!S;PkTF%c) z{f1rZD*>aKtj}7d)98KnpmnYZWiQ3dR}4DKy0#}NQ4~zF@76>)x~r9jF3Vg4Tn7iY zX96Y{bVPDE?_5Jr!=YA(qzUsLt--+z9geHF)UjLSjL+IFRMwrkH?XIS((bI}_XHM3 z)j3vAQ8~kh29Tb0CfI$(+jIh@WKQQf!}f^jG-Y)F;p{#Sn2|FC$e~?H-!IanCN*{` zjfyA9Qi`GLQ7X6u_c{g1jeH*5XJ^-^h*>h7-KW?Q@`pE&^!f1ORwYNTzyE0SLVfAl ztYfu}SP}{N0DL&362NzSyWTIRd9*|NB|kskDWx8v?3~5(fdO5|y5o%O5UE$Rh;!3dkzDw<8 zkT3-+4d)8B7WfeQDGu2lq;GI%Z??g8>WWvln&C)JivWVSe9PdW5^) zn0U_IMimE|ewwT^Z;y7wbio?}&sSkdI)2MI@QBRMB+}iS-%lCX^lWXp0mA6j>(>p7 zi#v5};tmu*A%kCT*yU6A^UknJ$1wgKQlm=HoZkLvL}Y%g@#_Q|`r(3VuX~M_gqtNT zp&9kp#x6h^^=<#yUh&A&ZWEN+Xhrsu#M_L~iN@m^JR$3H4mo)H`!PzUKi`UlMSAIvre`mhS z3jyiz(lXV|UJi8W?4G(fOPp@rr}Cb*tS%86+rXzZ`O59U`r96H}tQ0E-2%#etl}>wKr~4b}FezcM=qI^UuU`*TcNd{`l^ zC}28ZU zk3C2eFlh&jwVL;n_#P`vrG3oQv~e(fpSDFw5^)8LO==wW*Q#cE8TAY1REY2#F;px*73LNYox- zO}e$$%%i!pZ@l$uU9j{HD8k}~uABU1G}y1%Nuu@MTj4$r?I1GA!se%vT?uSjK0e}cYV8(-X9nzmp&!S1^!uv;j_~WtM`!0)d9W;^5XglF09FI=1bA6_v`5~)+9Hf3zyxY% zOHsmx(Il1t0}PZZxQA`RK}bNMAilykvHL*b4hrMgm+}Z8$?3_W0KzKphz(HrD~g5@4nQ4?sytNnUmJLF}Gy`CWtrP)+j{v5}8MHU)}%w4Cz5L0CYr zX&^oa{CC|PVG2dgV}Jkt`4dOKe;T4zFq&^~-mxeGJXrxdaHZG*jv}CV15j(0aOasa zUiXuEbi60O3RB9W<%WPdop*AAf`V6LcCcN!e%KR|1^@zF1P9~T& zBMJAjc_g zgBEbj+~TmH+?ZeDIc|SzRodR{Fsxd6?Bm%rA%-jta>2HU{G6ro2qRycy*=(D^JWKJ zS2Ev2+7RmF^~LDbt6$s$HPZrs#TY0SI6FU2yk+aiX?{P+)3sUmtt|S=fOe5Szvpe) z!NdmBcyQ$)_c)o)F2kA*ML#Zi)n~ywcRDUHm@jz|)oTB;~vwia|NEd7A3yV3%{0 z9bsT}6HuCk%Lz_IFnwDujd*d!T1?&*e3^rL4p`BXHF2icp>A*jVtTvNWb2D>ssgQK zeSeb9?h0vVDoMjeCI>qo)1CCHKH<~Nzvbeq{$~6ogJ`YPsJRIR@*dBh%%O`_tFP4# zq^Ql(RwpiVejiE=2h|n%rt$k(cGPFiz<1okHz+N5-JtKn>v~%bpKUdz(O2ufkRktW zS2LY&xY(p~Jk+o?Z?6ZP^lpF1I)qu?VJ(nfYTh$Pd(B(S_w{|tp|-wCtZS;JOB;udCV>V#SO`CBtS{0<2Q!Kl>1hZda#i5+%P$Kvv@eZ7a z%r_9HBCKsDo+t&P+zUJ#IUmG3`C^pT=XZ2Lww^YbzP+!%6}Gv{L@dR(^MQw-38eg8 z|JYs?y%wq1m=FD(!_o?-kN3Vv9vYku{5W<^voPC}6;zofZQZ=M5~;pn z&5Q90utJ_2m>PRpA{vn<8$p}8#xfWqQ%^pN*R|%9Bc}@U;cmKIoq-@s{V{|GBa4Hi zjbVl#*#(eW&tr|sD;Fujm?~LGbBwIe#eB~2${m%aNsW!FAS;x~ryiuXP|l5U2DYqr;iQY$W~CNH+S0*vkNXv zlsA?B8(go{R7O_Fg?FEfz+qd`U0<0MzrSvA$tO#EhL2dZa2LsJN zST~6`NT`~9S%P_W5>SzF9Qd60v^j*`gN9IoZaA#Xu_BxY*An(8Cpdft@!$%5Ajq(K z6)?*C3)oUaV%gBUo}?0~u4Hh54+d*`U2u@U!0h6sNj=Z&w*YP!BJA-=!D^?=>Sc94 zsLxspesH}!GiN_-=gv@fj`p=gO6a78_$DD+Lw~k(Dj)Hjpc~@SqEF?=Wl$JffzVdm zvUnPQ4jxQKfkB@_ik}3W#D69tB5uF>zW@X07n#bjlNtD^`C-Yv3*q!S%m^AgIytGX zu1*Rtus|h8aVDaZpb9>m-doY@OTN**iP^erF}n+P~1G zKR|r*m9x0BIn=WaIQ|vbi@$$=jtIP}`(J{Zu0nMU8_Ej7U#rF6P09x~%)VtuR}J-8 zVp4cKPUIsX3CB}o*Ff{5OS->;(GNfTtL}Uy?4gd!o&WQz>w5^3mTWy&|EPiDpsuCc zi0;}gHX<51B2M4`_*7XZdOLEBD3ADGpF~eci6W`~GGyi&re|`1;zYBo7{^t{byZ*0v-T&?h|NCF}zZ=m1ujPQhF;bcc U@-psIyjoS7Pj%JGpIE>9ALAG?#Q*>R diff --git a/sai/modules/saistart_sys_sai/img/saimod_log_stats.png b/sai/modules/saistart_sys_sai/img/saimod_log_stats.png deleted file mode 100644 index ef84e7cd76cb5944b711cfbe6768db1ccaca353d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221202 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"); - location.reload(true); - } else { - $('.help-block').html("Login not successfull.
    User & Password combination wrong.") - } - }); - event.preventDefault(); - } - }); - - $("#logout_form input").not("[type=submit]").jqBootstrapValidation({ - preventSubmit: true, - submitError: function($form, event, errors) {}, - submitSuccess: function($form, event){ - $.get('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_login&action=logout', function (data) { - if(data == 1){ - $('.help-block').html("Logout successfull.
    "); - location.reload(true); - } else { - $('.help-block').html("Logout not successfull.
    ") - } - }); - event.preventDefault(); - } - }); - -}; \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/qq/dummy b/sai/modules/saistart_sys_sai/qq/dummy deleted file mode 100644 index e69de29..0000000 diff --git a/sai/modules/saistart_sys_sai/saistart_sys_sai.php b/sai/modules/saistart_sys_sai/saistart_sys_sai.php deleted file mode 100644 index ec0f552..0000000 --- a/sai/modules/saistart_sys_sai/saistart_sys_sai.php +++ /dev/null @@ -1,39 +0,0 @@ - self::html_content()); - $vars = array_merge($vars, \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_BASIC), - \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI), - \SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI_ERROR)); - return \SYSTEM\PAGE\replace::replaceFile( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/tpl/saistart.tpl'),$vars);} - public static function html_li_menu(){return '

    ';} - public static function right_public(){return true;} - public static function right_right(){return true;} - - public static function css(){ - return array(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/css/saistart_sys_sai.css'));} - public static function js(){ - return array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/jqBootstrapValidation.js'), - \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/js/saistart_sys_sai.js'), - \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/crypto/jquery.md5.js'), - \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/crypto/jquery.sha1.js')); - } - - protected static function html_content(){ - if(!\SYSTEM\SECURITY\Security::isLoggedIn()){ - $vars = array(); - $vars['login'] = \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/tpl/login.tpl'), array()); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/tpl/content.tpl'),$vars); - } - $vars = array(); - $vars['project_name'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_PROJECT); - $vars['project_url'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL); - $vars['todo_entries'] = \SYSTEM\SAI\saimod_sys_todo::sai_mod__SYSTEM_SAI_saimod_sys_todo_action_todolist(); - $vars['log_entries'] = \SYSTEM\SAI\saimod_sys_log::sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter(); - $vars['logout'] = \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/tpl/logout.tpl')); - $vars = array_merge($vars,\SYSTEM\SAI\saimod_sys_todo::statistics()); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saistart_sys_sai/tpl/content_loggedin.tpl'), $vars); - } -} \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/carousel.tpl b/sai/modules/saistart_sys_sai/tpl/carousel.tpl deleted file mode 100644 index b4a0336..0000000 --- a/sai/modules/saistart_sys_sai/tpl/carousel.tpl +++ /dev/null @@ -1,61 +0,0 @@ -
    -

    Design. Simple. Fast. Reliable. Innovative.

    -

    We write awesome code and we use Twitter Bootstrap.

    -
    -
    - \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/content.tpl b/sai/modules/saistart_sys_sai/tpl/content.tpl deleted file mode 100644 index 2f0d400..0000000 --- a/sai/modules/saistart_sys_sai/tpl/content.tpl +++ /dev/null @@ -1,20 +0,0 @@ -
    -

    Design. Simple. Fast. Reliable. Innovative.

    -

    We write awesome code and we use SYSTEM and Twitter Bootstrap.

    -
    - -
    - ${login} -
    \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/content_loggedin.tpl b/sai/modules/saistart_sys_sai/tpl/content_loggedin.tpl deleted file mode 100644 index 2837e71..0000000 --- a/sai/modules/saistart_sys_sai/tpl/content_loggedin.tpl +++ /dev/null @@ -1,42 +0,0 @@ -
    -

    Welcome to the SYSTEM Admin Interface - short SAI.

    -

    From here you can control and manage your Website.

    -
    -
    -
    -

    Project

    - Name: ${project_name}
    - URL: ${project_url}
    - Progress: ${project}% -
    -
    -

    Analytics

    - IPs today: ${ip_today}
    - Users today: ${user_today}
    -
    - IPs this week: ${ip_week}
    - Users this week: ${user_week}
    -
    - IPs this month: ${ip_month}
    - Users this month: ${user_month} -
    -
    -

    Git

    - Current Project Version: ${git_project}
    - Current SYSTEM Version: ${git_system} -
    -
    - ${logout} -
    -
    -
    -

    Todo

    - Status: ${project_count}/${project_all}
    - Progress: ${project}% - ${todo_entries} -
    -
    -

    Log

    -

    100 Latest Log Entries

    - ${log_entries} -
    \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/login.tpl b/sai/modules/saistart_sys_sai/tpl/login.tpl deleted file mode 100644 index 7682d4c..0000000 --- a/sai/modules/saistart_sys_sai/tpl/login.tpl +++ /dev/null @@ -1,33 +0,0 @@ -

    ${basic_login}

    -${basic_text_login} -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - -
    -
    \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/logout.tpl b/sai/modules/saistart_sys_sai/tpl/logout.tpl deleted file mode 100644 index 5c71dbe..0000000 --- a/sai/modules/saistart_sys_sai/tpl/logout.tpl +++ /dev/null @@ -1,11 +0,0 @@ -

    ${basic_logout}

    -${basic_text_logout} -
    -
    -
    -
    -
    - - -
    -
    \ No newline at end of file diff --git a/sai/modules/saistart_sys_sai/tpl/saistart.tpl b/sai/modules/saistart_sys_sai/tpl/saistart.tpl deleted file mode 100644 index 2f5dce0..0000000 --- a/sai/modules/saistart_sys_sai/tpl/saistart.tpl +++ /dev/null @@ -1,3 +0,0 @@ -
    - ${content} -
    \ No newline at end of file diff --git a/sai/page/css/libs/bootstrap-responsive.css b/sai/page/css/libs/bootstrap-responsive.css deleted file mode 100644 index a3352d7..0000000 --- a/sai/page/css/libs/bootstrap-responsive.css +++ /dev/null @@ -1,1092 +0,0 @@ -/*! - * Bootstrap Responsive v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -@-ms-viewport { - width: device-width; -} - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.hidden { - display: none; - visibility: hidden; -} - -.visible-phone { - display: none !important; -} - -.visible-tablet { - display: none !important; -} - -.hidden-desktop { - display: none !important; -} - -.visible-desktop { - display: inherit !important; -} - -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} - -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} - -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} - -@media (max-width: 767px) { - body { - padding-right: 20px; - padding-left: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-right: -20px; - margin-left: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - width: auto; - clear: none; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - display: block; - float: none; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - right: 20px; - left: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} - -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-right: 10px; - padding-left: 10px; - } - .media .pull-left, - .media .pull-right { - display: block; - float: none; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - right: 10px; - left: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-right: 10px; - padding-left: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - padding: 0; - margin-top: 5px; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - display: none; - float: none; - max-width: none; - padding: 0; - margin: 0 15px; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - height: 0; - overflow: hidden; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-right: 10px; - padding-left: 10px; - } -} - -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/sai/page/css/libs/bootstrap-responsive.min.css b/sai/page/css/libs/bootstrap-responsive.min.css deleted file mode 100644 index 5cb833f..0000000 --- a/sai/page/css/libs/bootstrap-responsive.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Responsive v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */@-ms-viewport{width:device-width}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/sai/page/css/libs/bootstrap-switch.css b/sai/page/css/libs/bootstrap-switch.css deleted file mode 100644 index df4aa4d..0000000 --- a/sai/page/css/libs/bootstrap-switch.css +++ /dev/null @@ -1,203 +0,0 @@ -/* line 9, ../sass/bootstrap-switch.scss */ -.switch { - display: inline-block; - cursor: pointer; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; - border: 1px solid; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background: #e6e6e6; - position: relative; - text-align: left; - overflow: hidden; - line-height: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - min-width: 100px; -} -/* line 31, ../sass/bootstrap-switch.scss */ -.switch.switch-mini { - min-width: 70px; -} -/* line 35, ../sass/bootstrap-switch.scss */ -.switch.switch-small { - min-width: 80px; -} -/* line 39, ../sass/bootstrap-switch.scss */ -.switch.switch-large { - min-width: 120px; -} -/* line 43, ../sass/bootstrap-switch.scss */ -.switch.deactivate { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - opacity: 0.5; - cursor: default !important; -} -/* line 46, ../sass/bootstrap-switch.scss */ -.switch.deactivate label, .switch.deactivate span { - cursor: default !important; -} -/* line 50, ../sass/bootstrap-switch.scss */ -.switch > div { - display: inline-block; - width: 150%; - position: relative; - top: 0; -} -/* line 56, ../sass/bootstrap-switch.scss */ -.switch > div.switch-animate { - -webkit-transition: left 0.5s; - -moz-transition: left 0.5s; - -o-transition: left 0.5s; - transition: left 0.5s; -} -/* line 59, ../sass/bootstrap-switch.scss */ -.switch > div.switch-off { - left: -49.5%; -} -/* line 62, ../sass/bootstrap-switch.scss */ -.switch > div.switch-on { - left: 0%; -} -/* line 66, ../sass/bootstrap-switch.scss */ -.switch input[type=checkbox] { - display: none; -} -/* line 74, ../sass/bootstrap-switch.scss */ -.switch span, .switch label { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; - position: relative; - display: inline-block; - height: 100%; - padding-bottom: 4px; - padding-top: 4px; - font-size: 14px; - line-height: 20px; -} -/* line 87, ../sass/bootstrap-switch.scss */ -.switch span.switch-mini, .switch label.switch-mini { - padding-bottom: 4px; - padding-top: 4px; - font-size: 10px; - line-height: 9px; -} -/* line 94, ../sass/bootstrap-switch.scss */ -.switch span.switch-small, .switch label.switch-small { - padding-bottom: 3px; - padding-top: 3px; - font-size: 12px; - line-height: 18px; -} -/* line 101, ../sass/bootstrap-switch.scss */ -.switch span.switch-large, .switch label.switch-large { - padding-bottom: 9px; - padding-top: 9px; - font-size: 16px; - line-height: normal; -} -/* line 109, ../sass/bootstrap-switch.scss */ -.switch label { - background: white; - margin-top: -1px; - margin-bottom: -1px; - z-index: 100; - width: 34%; - border-left: 1px solid #e6e6e6; - border-right: 1px solid #e6e6e6; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(top, #ffffff, #e6e6e6); -} -/* line 121, ../sass/bootstrap-switch.scss */ -.switch span { - color: white; - text-align: center; - z-index: 1; - width: 33%; -} -/* line 127, ../sass/bootstrap-switch.scss */ -.switch span.switch-left { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; -} -/* line 131, ../sass/bootstrap-switch.scss */ -.switch span.switch-right { - color: black; - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); - background-image: -webkit-linear-gradient(bottom, #ffffff, #e6e6e6); - background-image: -moz-linear-gradient(bottom, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(bottom, #ffffff, #e6e6e6); - background-image: linear-gradient(bottom, #ffffff, #e6e6e6); -} -/* line 138, ../sass/bootstrap-switch.scss */ -.switch span.switch-primary, .switch span.switch-left { - color: white; - background: #0088cc; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #0088cc), color-stop(100%, #0055cc)); - background-image: -webkit-linear-gradient(bottom, #0088cc, #0055cc); - background-image: -moz-linear-gradient(bottom, #0088cc, #0055cc); - background-image: -o-linear-gradient(bottom, #0088cc, #0055cc); - background-image: linear-gradient(bottom, #0088cc, #0055cc); -} -/* line 143, ../sass/bootstrap-switch.scss */ -.switch span.switch-info { - color: white; - background: #5bc0de; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #5bc0de), color-stop(100%, #2f96b4)); - background-image: -webkit-linear-gradient(bottom, #5bc0de, #2f96b4); - background-image: -moz-linear-gradient(bottom, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(bottom, #5bc0de, #2f96b4); - background-image: linear-gradient(bottom, #5bc0de, #2f96b4); -} -/* line 149, ../sass/bootstrap-switch.scss */ -.switch span.switch-success { - color: white; - background: #62c462; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #62c462), color-stop(100%, #51a351)); - background-image: -webkit-linear-gradient(bottom, #62c462, #51a351); - background-image: -moz-linear-gradient(bottom, #62c462, #51a351); - background-image: -o-linear-gradient(bottom, #62c462, #51a351); - background-image: linear-gradient(bottom, #62c462, #51a351); -} -/* line 155, ../sass/bootstrap-switch.scss */ -.switch span.switch-warning { - color: white; - background: #dbb450; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dbb450), color-stop(100%, #f89406)); - background-image: -webkit-linear-gradient(bottom, #dbb450, #f89406); - background-image: -moz-linear-gradient(bottom, #dbb450, #f89406); - background-image: -o-linear-gradient(bottom, #dbb450, #f89406); - background-image: linear-gradient(bottom, #dbb450, #f89406); -} -/* line 161, ../sass/bootstrap-switch.scss */ -.switch span.switch-danger { - color: white; - background: #ee5f5b; - background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ee5f5b), color-stop(100%, #bd362f)); - background-image: -webkit-linear-gradient(bottom, #ee5f5b, #bd362f); - background-image: -moz-linear-gradient(bottom, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(bottom, #ee5f5b, #bd362f); - background-image: linear-gradient(bottom, #ee5f5b, #bd362f); -} diff --git a/sai/page/css/libs/bootstrap-timepicker.min.css b/sai/page/css/libs/bootstrap-timepicker.min.css deleted file mode 100644 index 53b682f..0000000 --- a/sai/page/css/libs/bootstrap-timepicker.min.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Timepicker Component for Twitter Bootstrap - * - * Copyright 2013 Joris de Wit - * - * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker .bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker .bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker .bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker .bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker .bootstrap-timepicker-widget.modal{top:30%;margin-top:0;width:200px;margin-left:-100px}.bootstrap-timepicker .bootstrap-timepicker-widget.modal .modal-content{padding:4px}.bootstrap-timepicker .bootstrap-timepicker-widget a.btn,.bootstrap-timepicker .bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker .bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker .bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker .bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker .bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker .bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker .bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker .bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker .bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center} \ No newline at end of file diff --git a/sai/page/css/libs/bootstrap.css b/sai/page/css/libs/bootstrap.css deleted file mode 100644 index 8ab3cef..0000000 --- a/sai/page/css/libs/bootstrap.css +++ /dev/null @@ -1,6039 +0,0 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover { - color: #356635; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover td, -.table-hover tbody tr:hover th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success td { - background-color: #dff0d8; -} - -.table tbody tr.error td { - background-color: #f2dede; -} - -.table tbody tr.warning td { - background-color: #fcf8e3; -} - -.table tbody tr.info td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} - -.dropdown-menu .disabled > a:hover { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #bbbbbb; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - content: ""; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover { - text-decoration: none; - background-color: #f5f5f5; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > span { - color: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - content: ""; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - margin-top: -3px; -} - -.tooltip.right { - margin-left: 3px; -} - -.tooltip.bottom { - margin-top: 3px; -} - -.tooltip.left { - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media .pull-left { - margin-right: 10px; -} - -.media .pull-right { - margin-left: 10px; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img { - display: block; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -} diff --git a/sai/page/css/libs/bootstrap.min.css b/sai/page/css/libs/bootstrap.min.css deleted file mode 100644 index 140f731..0000000 --- a/sai/page/css/libs/bootstrap.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover{color:#808080}.text-warning{color:#c09853}a.text-warning:hover{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover{color:#2d6987}.text-success{color:#468847}a.text-success:hover{color:#356635}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media .pull-left{margin-right:10px}.media .pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/sai/page/css/libs/datepicker.css b/sai/page/css/libs/datepicker.css deleted file mode 100644 index bd9b6b9..0000000 --- a/sai/page/css/libs/datepicker.css +++ /dev/null @@ -1,7 +0,0 @@ - /* - Datepicker for Bootstrap - Copyright 2012 Stefan Petre - Licensed under the Apache License v2.0 - http://www.apache.org/licenses/LICENSE-2.0 -*/ - .datepicker { top: 0; left: 0; padding: 4px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; /*.dow { border-top: 1px solid #ddd !important; }*/ } .datepicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .datepicker:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .datepicker > div { display: none; } .datepicker table { width: 100%; margin: 0; } .datepicker td, .datepicker th { text-align: center; width: 20px; height: 20px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datepicker td.day:hover { background: #eeeeee; cursor: pointer; } .datepicker td.old, .datepicker td.new { color: #999999; } .datepicker td.active, .datepicker td.active:hover { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker td.active:hover, .datepicker td.active:hover:hover, .datepicker td.active:active, .datepicker td.active:hover:active, .datepicker td.active.active, .datepicker td.active:hover.active, .datepicker td.active.disabled, .datepicker td.active:hover.disabled, .datepicker td.active[disabled], .datepicker td.active:hover[disabled] { background-color: #0044cc; } .datepicker td.active:active, .datepicker td.active:hover:active, .datepicker td.active.active, .datepicker td.active:hover.active { background-color: #003399 \9; } .datepicker td span { display: block; width: 47px; height: 54px; line-height: 54px; float: left; margin: 2px; cursor: pointer; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datepicker td span:hover { background: #eeeeee; } .datepicker td span.active { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datepicker td span.active:hover, .datepicker td span.active:active, .datepicker td span.active.active, .datepicker td span.active.disabled, .datepicker td span.active[disabled] { background-color: #0044cc; } .datepicker td span.active:active, .datepicker td span.active.active { background-color: #003399 \9; } .datepicker td span.old { color: #999999; } .datepicker th.switch { width: 145px; } .datepicker th.next, .datepicker th.prev { font-size: 19.5px; } .datepicker thead tr:first-child th { cursor: pointer; } .datepicker thead tr:first-child th:hover { background: #eeeeee; } .input-append.date .add-on i, .input-prepend.date .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; } \ No newline at end of file diff --git a/sai/page/css/libs/jquery.miniColors.css b/sai/page/css/libs/jquery.miniColors.css deleted file mode 100644 index 0f5696d..0000000 --- a/sai/page/css/libs/jquery.miniColors.css +++ /dev/null @@ -1,206 +0,0 @@ -.minicolors { - position: relative; - display: inline-block; - z-index: 1; -} - -.minicolors-focus { - z-index: 2; -} - -.minicolors INPUT { - margin-right: 3px; - border: solid 1px #CCC; - font: 14px sans-serif; - width: 65px; - height: 16px; - vertical-align: middle; - border-radius: 0; - box-shadow: inset 0 2px 4px rgba(0, 0, 0, .04); - outline: none; - padding: 2px; - margin-right: -1px; -} - -.minicolors-swatch-left INPUT { - margin-left: -1px; - margin-right: auto; -} - -.minicolors-focus INPUT, -.minicolors-focus .minicolors-swatch { - border-color: #999; -} - -.minicolors-hidden { - position: absolute; - left: -9999em; -} - -.minicolors-swatch { - position: relative; - width: 20px; - height: 20px; - background: url(jquery.minicolors.png) -80px 0; - border: solid 1px #CCC; - display: inline-block; - vertical-align: middle; -} - -.minicolors-swatch SPAN { - position: absolute; - width: 100%; - height: 100%; - background: none; - box-shadow: inset 0 9px 0 rgba(255, 255, 255, .1); - display: inline-block; -} - -/* Panel */ -.minicolors-panel { - position: absolute; - top: 26px; - left: 0; - width: 173px; - height: 152px; - background: white; - border: solid 1px #CCC; - box-shadow: 0 0 20px rgba(0, 0, 0, .2); - display: none; -} - -.minicolors-position-top .minicolors-panel { - top: -156px; -} - -.minicolors-position-left .minicolors-panel { - left: -83px; -} - -.minicolors-position-left.minicolors-with-opacity .minicolors-panel { - left: -104px; -} - -.minicolors-with-opacity .minicolors-panel { - width: 194px; -} - -.minicolors .minicolors-grid { - position: absolute; - top: 1px; - left: 1px; - width: 150px; - height: 150px; - background: url(jquery.minicolors.png) -120px 0; - cursor: crosshair; -} - -.minicolors .minicolors-grid-inner { - position: absolute; - top: 0; - left: 0; - width: 150px; - height: 150px; - background: none; -} - -.minicolors-slider-saturation .minicolors-grid { - background-position: -420px 0; -} - -.minicolors-slider-saturation .minicolors-grid-inner { - background: url(jquery.minicolors.png) -270px 0; -} - -.minicolors-slider-brightness .minicolors-grid { - background-position: -570px 0; -} - -.minicolors-slider-brightness .minicolors-grid-inner { - background: black; -} - -.minicolors-slider-wheel .minicolors-grid { - background-position: -720px 0; -} - -.minicolors-slider, -.minicolors-opacity-slider { - position: absolute; - top: 1px; - left: 152px; - width: 20px; - height: 150px; - background: white url(jquery.minicolors.png) 0 0; - cursor: crosshair; -} - -.minicolors-slider-saturation .minicolors-slider { - background-position: -60px 0; -} - -.minicolors-slider-brightness .minicolors-slider { - background-position: -20px 0; -} - -.minicolors-slider-wheel .minicolors-slider { - background-position: -20px 0; -} - -.minicolors-opacity-slider { - left: 173px; - background-position: -40px 0; - display: none; -} - -.minicolors-with-opacity .minicolors-opacity-slider { - display: block; -} - -/* Pickers */ -.minicolors-grid .minicolors-picker { - position: absolute; - top: 70px; - left: 70px; - width: 10px; - height: 10px; - border: solid 1px black; - border-radius: 10px; - margin-top: -6px; - margin-left: -6px; - background: none; -} - -.minicolors-grid .minicolors-picker SPAN { - position: absolute; - top: 0; - left: 0; - width: 6px; - height: 6px; - border-radius: 6px; - border: solid 2px white; -} - -.minicolors-picker { - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 2px; - background: white; - border: solid 1px black; - margin-top: -2px; -} - -/* Inline controls */ -.minicolors-inline INPUT, -.minicolors-inline .minicolors-swatch { - display: none; -} - -.minicolors-inline .minicolors-panel { - position: relative; - top: auto; - left: auto; - display: inline-block; -} \ No newline at end of file diff --git a/sai/page/css/libs/jquery.minicolors.png b/sai/page/css/libs/jquery.minicolors.png deleted file mode 100644 index 8fa1e9d9062696b96641450a0b0dcc8669835782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77459 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 JPDHLkV1o8UQl|g_ diff --git a/sai/page/css/sai.css b/sai/page/css/sai.css deleted file mode 100644 index 9344ed1..0000000 --- a/sai/page/css/sai.css +++ /dev/null @@ -1,40 +0,0 @@ -/* - Document : index.css - Created on : 31.01.2013, 01:59:37 - Author : CHRIS MEURISCH - Description: - Purpose of the stylesheet follows. -*/ - -.brand-logo{ - float: left; - padding-top: 8px; - padding-right: 10px; -} - -.footer{ - text-align: right; - padding-right: 20px; - color: #777; -} - -.footer a{ - color: #777; -} - -.carousel-img{ - width: 1200px; - height: 650px; -} - -.sai_p_modules { - border-left: 3px solid #1C569C; -} -.sai_p_modules:hover { - border-right: 3px solid #1C569C; - border-left: 0; -} -.sai_p_modules:active { - border-right: 3px solid #1C569C; - border-left: 0; -} \ No newline at end of file diff --git a/sai/page/default_page.php b/sai/page/default_page.php deleted file mode 100644 index e526fd6..0000000 --- a/sai/page/default_page.php +++ /dev/null @@ -1,76 +0,0 @@ -'. - ''. - ''; - return $result; - } - - private static function js(){ - $result = ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''; - return $result; - } - - private static function lang_switcher(){ - $result = ''; - $langs = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_LANGS); - foreach($langs as $lang){ - $result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'page/tpl/language.tpl'),array('lang' => $lang));} - return $result; - } - - public function html($_escaped_fragment_ = NULL){ - $vars = array(); - $vars['css'] = self::css(); - $vars['js'] = ''; - if(!$_escaped_fragment_){ - $vars['js'] = self::js();} - $vars['menu_start'] = self::menu_start(); - $vars['menu_sys'] = self::menu_sys(); - $vars['menu_proj'] = self::menu_proj(); - $vars['title'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE); - $vars['copyright'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT); - $vars['lang_switcher'] = self::lang_switcher(); - - $vars = array_merge($vars,\SYSTEM\locale::getStrings(\SYSTEM\DBD\system_locale_string::VALUE_CATEGORY_SYSTEM_SAI)); - return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'page/tpl/sai.tpl'), $vars); - } -} \ No newline at end of file diff --git a/sai/page/js/libs/bootstrap-datepicker.js b/sai/page/js/libs/bootstrap-datepicker.js deleted file mode 100644 index 8875ec1..0000000 --- a/sai/page/js/libs/bootstrap-datepicker.js +++ /dev/null @@ -1,454 +0,0 @@ -/* ========================================================= - * bootstrap-datepicker.js - * http://www.eyecon.ro/bootstrap-datepicker - * ========================================================= - * Copyright 2012 Stefan Petre - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - -!function( $ ) { - - // Picker object - - var Datepicker = function(element, options){ - this.element = $(element); - this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy'); - this.picker = $(DPGlobal.template) - .appendTo('body') - .on({ - click: $.proxy(this.click, this), - mousedown: $.proxy(this.mousedown, this) - }); - this.isInput = this.element.is('input'); - this.component = this.element.is('.date') ? this.element.find('.add-on') : false; - - if (this.isInput) { - this.element.on({ - focus: $.proxy(this.show, this), - blur: $.proxy(this.hide, this), - keyup: $.proxy(this.update, this) - }); - } else { - if (this.component){ - this.component.on('click', $.proxy(this.show, this)); - } else { - this.element.on('click', $.proxy(this.show, this)); - } - } - this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0; - if (typeof this.minViewMode === 'string') { - switch (this.minViewMode) { - case 'months': - this.minViewMode = 1; - break; - case 'years': - this.minViewMode = 2; - break; - default: - this.minViewMode = 0; - break; - } - } - this.viewMode = options.viewMode||this.element.data('date-viewmode')||0; - if (typeof this.viewMode === 'string') { - switch (this.viewMode) { - case 'months': - this.viewMode = 1; - break; - case 'years': - this.viewMode = 2; - break; - default: - this.viewMode = 0; - break; - } - } - this.startViewMode = this.viewMode; - this.weekStart = options.weekStart||this.element.data('date-weekstart')||0; - this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1; - this.fillDow(); - this.fillMonths(); - this.update(); - this.showMode(); - }; - - Datepicker.prototype = { - constructor: Datepicker, - - show: function(e) { - this.picker.show(); - this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); - this.place(); - $(window).on('resize', $.proxy(this.place, this)); - if (e ) { - e.stopPropagation(); - e.preventDefault(); - } - if (!this.isInput) { - $(document).on('mousedown', $.proxy(this.hide, this)); - } - this.element.trigger({ - type: 'show', - date: this.date - }); - }, - - hide: function(){ - this.picker.hide(); - $(window).off('resize', this.place); - this.viewMode = this.startViewMode; - this.showMode(); - if (!this.isInput) { - $(document).off('mousedown', this.hide); - } - this.set(); - this.element.trigger({ - type: 'hide', - date: this.date - }); - }, - - set: function() { - var formated = DPGlobal.formatDate(this.date, this.format); - if (!this.isInput) { - if (this.component){ - this.element.find('input').prop('value', formated); - } - this.element.data('date', formated); - } else { - this.element.prop('value', formated); - } - }, - - setValue: function(newDate) { - if (typeof newDate === 'string') { - this.date = DPGlobal.parseDate(newDate, this.format); - } else { - this.date = new Date(newDate); - } - this.set(); - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); - this.fill(); - }, - - place: function(){ - var offset = this.component ? this.component.offset() : this.element.offset(); - this.picker.css({ - top: offset.top + this.height, - left: offset.left - }); - }, - - update: function(newDate){ - this.date = DPGlobal.parseDate( - typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')), - this.format - ); - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); - this.fill(); - }, - - fillDow: function(){ - var dowCnt = this.weekStart; - var html = ''; - while (dowCnt < this.weekStart + 7) { - html += ''+DPGlobal.dates.daysMin[(dowCnt++)%7]+''; - } - html += ''; - this.picker.find('.datepicker-days thead').append(html); - }, - - fillMonths: function(){ - var html = ''; - var i = 0 - while (i < 12) { - html += ''+DPGlobal.dates.monthsShort[i++]+''; - } - this.picker.find('.datepicker-months td').append(html); - }, - - fill: function() { - var d = new Date(this.viewDate), - year = d.getFullYear(), - month = d.getMonth(), - currentDate = this.date.valueOf(); - this.picker.find('.datepicker-days th:eq(1)') - .text(DPGlobal.dates.months[month]+' '+year); - var prevMonth = new Date(year, month-1, 28,0,0,0,0), - day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth()); - prevMonth.setDate(day); - prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7); - var nextMonth = new Date(prevMonth); - nextMonth.setDate(nextMonth.getDate() + 42); - nextMonth = nextMonth.valueOf(); - html = []; - var clsName; - while(prevMonth.valueOf() < nextMonth) { - if (prevMonth.getDay() === this.weekStart) { - html.push(''); - } - clsName = ''; - if (prevMonth.getMonth() < month) { - clsName += ' old'; - } else if (prevMonth.getMonth() > month) { - clsName += ' new'; - } - if (prevMonth.valueOf() === currentDate) { - clsName += ' active'; - } - html.push(''+prevMonth.getDate() + ''); - if (prevMonth.getDay() === this.weekEnd) { - html.push(''); - } - prevMonth.setDate(prevMonth.getDate()+1); - } - this.picker.find('.datepicker-days tbody').empty().append(html.join('')); - var currentYear = this.date.getFullYear(); - - var months = this.picker.find('.datepicker-months') - .find('th:eq(1)') - .text(year) - .end() - .find('span').removeClass('active'); - if (currentYear === year) { - months.eq(this.date.getMonth()).addClass('active'); - } - - html = ''; - year = parseInt(year/10, 10) * 10; - var yearCont = this.picker.find('.datepicker-years') - .find('th:eq(1)') - .text(year + '-' + (year + 9)) - .end() - .find('td'); - year -= 1; - for (var i = -1; i < 11; i++) { - html += ''+year+''; - year += 1; - } - yearCont.html(html); - }, - - click: function(e) { - e.stopPropagation(); - e.preventDefault(); - var target = $(e.target).closest('span, td, th'); - if (target.length === 1) { - switch(target[0].nodeName.toLowerCase()) { - case 'th': - switch(target[0].className) { - case 'switch': - this.showMode(1); - break; - case 'prev': - case 'next': - this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call( - this.viewDate, - this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) + - DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1) - ); - this.fill(); - this.set(); - break; - } - break; - case 'span': - if (target.is('.month')) { - var month = target.parent().find('span').index(target); - this.viewDate.setMonth(month); - } else { - var year = parseInt(target.text(), 10)||0; - this.viewDate.setFullYear(year); - } - if (this.viewMode !== 0) { - this.date = new Date(this.viewDate); - this.element.trigger({ - type: 'changeDate', - date: this.date, - viewMode: DPGlobal.modes[this.viewMode].clsName - }); - } - this.showMode(-1); - this.fill(); - this.set(); - break; - case 'td': - if (target.is('.day')){ - var day = parseInt(target.text(), 10)||1; - var month = this.viewDate.getMonth(); - if (target.is('.old')) { - month -= 1; - } else if (target.is('.new')) { - month += 1; - } - var year = this.viewDate.getFullYear(); - this.date = new Date(year, month, day,0,0,0,0); - this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0); - this.fill(); - this.set(); - this.element.trigger({ - type: 'changeDate', - date: this.date, - viewMode: DPGlobal.modes[this.viewMode].clsName - }); - } - break; - } - } - }, - - mousedown: function(e){ - e.stopPropagation(); - e.preventDefault(); - }, - - showMode: function(dir) { - if (dir) { - this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir)); - } - this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); - } - }; - - $.fn.datepicker = function ( option, val ) { - return this.each(function () { - var $this = $(this), - data = $this.data('datepicker'), - options = typeof option === 'object' && option; - if (!data) { - $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options)))); - } - if (typeof option === 'string') data[option](val); - }); - }; - - $.fn.datepicker.defaults = { - }; - $.fn.datepicker.Constructor = Datepicker; - - var DPGlobal = { - modes: [ - { - clsName: 'days', - navFnc: 'Month', - navStep: 1 - }, - { - clsName: 'months', - navFnc: 'FullYear', - navStep: 1 - }, - { - clsName: 'years', - navFnc: 'FullYear', - navStep: 10 - }], - dates:{ - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], - daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], - daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - }, - isLeapYear: function (year) { - return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) - }, - getDaysInMonth: function (year, month) { - return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] - }, - parseFormat: function(format){ - var separator = format.match(/[.\/\-\s].*?/), - parts = format.split(/\W+/); - if (!separator || !parts || parts.length === 0){ - throw new Error("Invalid date format."); - } - return {separator: separator, parts: parts}; - }, - parseDate: function(date, format) { - var parts = date.split(format.separator), - date = new Date(), - val; - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - if (parts.length === format.parts.length) { - for (var i=0, cnt = format.parts.length; i < cnt; i++) { - val = parseInt(parts[i], 10)||1; - switch(format.parts[i]) { - case 'dd': - case 'd': - date.setDate(val); - break; - case 'mm': - case 'm': - date.setMonth(val - 1); - break; - case 'yy': - date.setFullYear(2000 + val); - break; - case 'yyyy': - date.setFullYear(val); - break; - } - } - } - return date; - }, - formatDate: function(date, format){ - var val = { - d: date.getDate(), - m: date.getMonth() + 1, - yy: date.getFullYear().toString().substring(2), - yyyy: date.getFullYear() - }; - val.dd = (val.d < 10 ? '0' : '') + val.d; - val.mm = (val.m < 10 ? '0' : '') + val.m; - var date = []; - for (var i=0, cnt = format.parts.length; i < cnt; i++) { - date.push(val[format.parts[i]]); - } - return date.join(format.separator); - }, - headTemplate: ''+ - ''+ - '‹'+ - ''+ - '›'+ - ''+ - '', - contTemplate: '' - }; - DPGlobal.template = '

    '; - -}( window.jQuery ) \ No newline at end of file diff --git a/sai/page/js/libs/bootstrap-timepicker.min.js b/sai/page/js/libs/bootstrap-timepicker.min.js deleted file mode 100644 index 43e94e9..0000000 --- a/sai/page/js/libs/bootstrap-timepicker.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! Bootstrap-Timepicker v0.1.0 -* http://jdewit.github.com/bootstrap-timepicker -* Copyright (c) 2013 Joris de Wit -* MIT License -*/ -(function(e,t,n,r){"use strict";var i=function(t,n){this.widget="",this.$element=e(t),this.defaultTime=n.defaultTime,this.disableFocus=n.disableFocus,this.isOpen=n.isOpen,this.minuteStep=n.minuteStep,this.modalBackdrop=n.modalBackdrop,this.secondStep=n.secondStep,this.showInputs=n.showInputs,this.showMeridian=n.showMeridian,this.showSeconds=n.showSeconds,this.template=n.template,this._init()};i.prototype={constructor:i,_init:function(){var t=this;this.$element.parent().hasClass("input-append")?(this.$element.parent(".input-append").find(".add-on").on({"click.timepicker":e.proxy(this.showWidget,this)}),this.$element.on({"focus.timepicker":e.proxy(this.highlightUnit,this),"click.timepicker":e.proxy(this.highlightUnit,this),"keydown.timepicker":e.proxy(this.elementKeydown,this),"blur.timepicker":e.proxy(this.blurElement,this)})):this.template?this.$element.on({"focus.timepicker":e.proxy(this.showWidget,this),"click.timepicker":e.proxy(this.showWidget,this),"blur.timepicker":e.proxy(this.blurElement,this)}):this.$element.on({"focus.timepicker":e.proxy(this.highlightUnit,this),"click.timepicker":e.proxy(this.highlightUnit,this),"keydown.timepicker":e.proxy(this.elementKeydown,this),"blur.timepicker":e.proxy(this.blurElement,this)}),this.$widget=e(this.getTemplate()).appendTo(this.$element.parents(".bootstrap-timepicker")).on("click",e.proxy(this.widgetClick,this)),this.showInputs&&this.$widget.find("input").each(function(){e(this).on({"click.timepicker":function(){e(this).select()},"keydown.timepicker":e.proxy(t.widgetKeydown,t)})}),this.setDefaultTime(this.defaultTime)},blurElement:function(){this.highlightedUnit=r,this.updateFromElementVal()},decrementHour:function(){if(this.showMeridian)if(this.hour===1)this.hour=12;else{if(this.hour===12)return this.hour--,this.toggleMeridian();if(this.hour===0)return this.hour=11,this.toggleMeridian();this.hour--}else this.hour===0?this.hour=23:this.hour--;this.update()},decrementMinute:function(e){var t;e?t=this.minute-e:t=this.minute-this.minuteStep,t<0?(this.decrementHour(),this.minute=t+60):this.minute=t,this.update()},decrementSecond:function(){var e=this.second-this.secondStep;e<0?(this.decrementMinute(!0),this.second=e+60):this.second=e,this.update()},elementKeydown:function(e){switch(e.keyCode){case 9:this.updateFromElementVal();switch(this.highlightedUnit){case"hour":e.preventDefault(),this.highlightNextUnit();break;case"minute":if(this.showMeridian||this.showSeconds)e.preventDefault(),this.highlightNextUnit();break;case"second":this.showMeridian&&(e.preventDefault(),this.highlightNextUnit())}break;case 27:this.updateFromElementVal();break;case 37:e.preventDefault(),this.highlightPrevUnit(),this.updateFromElementVal();break;case 38:e.preventDefault();switch(this.highlightedUnit){case"hour":this.incrementHour(),this.highlightHour();break;case"minute":this.incrementMinute(),this.highlightMinute();break;case"second":this.incrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}break;case 39:e.preventDefault(),this.updateFromElementVal(),this.highlightNextUnit();break;case 40:e.preventDefault();switch(this.highlightedUnit){case"hour":this.decrementHour(),this.highlightHour();break;case"minute":this.decrementMinute(),this.highlightMinute();break;case"second":this.decrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}}},formatTime:function(e,t,n,r){return e=e<10?"0"+e:e,t=t<10?"0"+t:t,n=n<10?"0"+n:n,e+":"+t+(this.showSeconds?":"+n:"")+(this.showMeridian?" "+r:"")},getCursorPosition:function(){var e=this.$element.get(0);if("selectionStart"in e)return e.selectionStart;if(n.selection){e.focus();var t=n.selection.createRange(),r=n.selection.createRange().text.length;return t.moveStart("character",-e.value.length),t.text.length-r}},getTemplate:function(){var e,t,n,r,i,s;this.showInputs?(t='',n='',r='',i=''):(t='',n='',r='',i=''),s=''+(this.showSeconds?'':"")+(this.showMeridian?'':"")+""+""+" "+''+" "+(this.showSeconds?'":"")+(this.showMeridian?'":"")+""+""+''+''+''+(this.showSeconds?'':"")+(this.showMeridian?'':"")+""+"
       
    "+t+":"+n+":'+r+" '+i+"
      
    ";switch(this.template){case"modal":e='";break;case"dropdown":e='"}return e},getTime:function(){return this.formatTime(this.hour,this.minute,this.second,this.meridian)},hideWidget:function(){if(this.isOpen===!1)return;this.$element.trigger({type:"hide.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.template==="modal"?this.$widget.modal("hide"):this.$widget.removeClass("open"),e(n).off("mousedown.timepicker"),this.isOpen=!1},highlightUnit:function(){this.position=this.getCursorPosition(),this.position>=0&&this.position<=2?this.highlightHour():this.position>=3&&this.position<=5?this.highlightMinute():this.position>=6&&this.position<=8?this.showSeconds?this.highlightSecond():this.highlightMeridian():this.position>=9&&this.position<=11&&this.highlightMeridian()},highlightNextUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMinute();break;case"minute":this.showSeconds?this.highlightSecond():this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"second":this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"meridian":this.highlightHour()}},highlightPrevUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMeridian();break;case"minute":this.highlightHour();break;case"second":this.highlightMinute();break;case"meridian":this.showSeconds?this.highlightSecond():this.highlightMinute()}},highlightHour:function(){var e=this.$element;this.highlightedUnit="hour",setTimeout(function(){e.get(0).setSelectionRange(0,2)},0)},highlightMinute:function(){var e=this.$element;this.highlightedUnit="minute",setTimeout(function(){e.get(0).setSelectionRange(3,5)},0)},highlightSecond:function(){var e=this.$element;this.highlightedUnit="second",setTimeout(function(){e.get(0).setSelectionRange(6,8)},0)},highlightMeridian:function(){var e=this.$element;this.highlightedUnit="meridian",this.showSeconds?setTimeout(function(){e.get(0).setSelectionRange(9,11)},0):setTimeout(function(){e.get(0).setSelectionRange(6,8)},0)},incrementHour:function(){if(this.showMeridian){if(this.hour===11)return this.hour++,this.toggleMeridian();if(this.hour===12)return this.hour=1}if(this.hour===23)return this.hour=0;this.hour++,this.update()},incrementMinute:function(e){var t;e?t=this.minute+e:t=this.minute+this.minuteStep-this.minute%this.minuteStep,t>59?(this.incrementHour(),this.minute=t-60):this.minute=t,this.update()},incrementSecond:function(){var e=this.second+this.secondStep-this.second%this.secondStep;e>59?(this.incrementMinute(!0),this.second=e-60):this.second=e,this.update()},remove:function(){e("document").off(".timepicker"),this.$widget.remove(),delete this.$element.data().timepicker},setDefaultTime:function(e){if(!this.$element.val())if(e==="current"){var t=new Date,n=t.getHours(),r=Math.floor(t.getMinutes()/this.minuteStep)*this.minuteStep,i=Math.floor(t.getSeconds()/this.secondStep)*this.secondStep,s="AM";this.showMeridian&&(n===0?n=12:n>=12?(n>12&&(n-=12),s="PM"):s="AM"),this.hour=n,this.minute=r,this.second=i,this.meridian=s,this.update()}else e===!1&&(this.hour=0,this.minute=0,this.second=0,this.meridian="AM");else this.updateFromElementVal()},setTime:function(e){var t,n;this.showMeridian?(t=e.split(" "),n=t[0].split(":"),this.meridian=t[1]):n=e.split(":"),this.hour=parseInt(n[0],10),this.minute=parseInt(n[1],10),this.second=parseInt(n[2],10),isNaN(this.hour)&&(this.hour=0),isNaN(this.minute)&&(this.minute=0);if(this.showMeridian){this.hour>12?this.hour=12:this.hour<1&&(this.hour=12);if(this.meridian==="am"||this.meridian==="a")this.meridian="AM";else if(this.meridian==="pm"||this.meridian==="p")this.meridian="PM";this.meridian!=="AM"&&this.meridian!=="PM"&&(this.meridian="AM")}else this.hour>=24?this.hour=23:this.hour<0&&(this.hour=0);this.minute<0?this.minute=0:this.minute>=60&&(this.minute=59),this.showSeconds&&(isNaN(this.second)?this.second=0:this.second<0?this.second=0:this.second>=60&&(this.second=59)),this.update()},showWidget:function(){if(this.isOpen)return;var t=this;e(n).on("mousedown.timepicker",function(n){e(n.target).closest(".bootstrap-timepicker-widget").length===0&&t.hideWidget()}),this.$element.trigger({type:"show.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.disableFocus&&this.$element.blur(),this.updateFromElementVal(),this.template==="modal"?this.$widget.modal("show").on("hidden",e.proxy(this.hideWidget,this)):this.isOpen===!1&&this.$widget.addClass("open"),this.isOpen=!0},toggleMeridian:function(){this.meridian=this.meridian==="AM"?"PM":"AM",this.update()},update:function(){this.$element.trigger({type:"changeTime.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.updateElement(),this.updateWidget()},updateElement:function(){this.$element.val(this.getTime())},updateFromElementVal:function(){this.setTime(this.$element.val())},updateWidget:function(){var e=this.hour<10?"0"+this.hour:this.hour,t=this.minute<10?"0"+this.minute:this.minute,n=this.second<10?"0"+this.second:this.second;this.showInputs?(this.$widget.find("input.bootstrap-timepicker-hour").val(e),this.$widget.find("input.bootstrap-timepicker-minute").val(t),this.showSeconds&&this.$widget.find("input.bootstrap-timepicker-second").val(n),this.showMeridian&&this.$widget.find("input.bootstrap-timepicker-meridian").val(this.meridian)):(this.$widget.find("span.bootstrap-timepicker-hour").text(e),this.$widget.find("span.bootstrap-timepicker-minute").text(t),this.showSeconds&&this.$widget.find("span.bootstrap-timepicker-second").text(n),this.showMeridian&&this.$widget.find("span.bootstrap-timepicker-meridian").text(this.meridian))},updateFromWidgetInputs:function(){var t=e("input.bootstrap-timepicker-hour",this.$widget).val()+":"+e("input.bootstrap-timepicker-minute",this.$widget).val()+(this.showSeconds?":"+e("input.bootstrap-timepicker-second",this.$widget).val():"")+(this.showMeridian?" "+e("input.bootstrap-timepicker-meridian",this.$widget).val():"");this.setTime(t)},widgetClick:function(t){t.stopPropagation(),t.preventDefault();var n=e(t.target).closest("a").data("action");n&&this[n]()},widgetKeydown:function(t){var n=e(t.target).closest("input"),r=n.attr("name");switch(t.keyCode){case 9:this.updateFromWidgetInputs(),this.showMeridian?r==="meridian"&&this.hideWidget():this.showSeconds?r==="second"&&this.hideWidget():r==="minute"&&this.hideWidget();break;case 27:this.hideWidget();break;case 38:t.preventDefault();switch(r){case"hour":this.incrementHour();break;case"minute":this.incrementMinute();break;case"second":this.incrementSecond();break;case"meridian":this.toggleMeridian()}break;case 40:t.preventDefault();switch(r){case"hour":this.decrementHour();break;case"minute":this.decrementMinute();break;case"second":this.decrementSecond();break;case"meridian":this.toggleMeridian()}}n.select()}},e.fn.timepicker=function(t){var n=Array.apply(null,arguments);return n.shift(),this.each(function(){var r=e(this),s=r.data("timepicker"),o=typeof t=="object"&&t;s||r.data("timepicker",s=new i(this,e.extend({},e.fn.timepicker.defaults,o,e(this).data()))),typeof t=="string"&&s[t].apply(s,n)})},e.fn.timepicker.defaults={defaultTime:"current",disableFocus:!1,isOpen:!1,minuteStep:15,modalBackdrop:!1,secondStep:15,showSeconds:!1,showInputs:!0,showMeridian:!0,template:"dropdown"},e.fn.timepicker.Constructor=i})(jQuery,window,document); \ No newline at end of file diff --git a/sai/page/js/libs/bootstrap.js b/sai/page/js/libs/bootstrap.js deleted file mode 100644 index 8ae571b..0000000 --- a/sai/page/js/libs/bootstrap.js +++ /dev/null @@ -1,1951 +0,0 @@ -/*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } - -/* ======================================================================== - * Bootstrap: transition.js v3.1.1 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd', - 'MozTransition' : 'transitionend', - 'OTransition' : 'oTransitionEnd otransitionend', - 'transition' : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.1.1 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.1.1 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') - } - - if (changed) this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.1.1 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return this.sliding = false - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid.bs.carousel', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid.bs.carousel') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.1.1 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.1.1 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('
  • '.\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE).'