├── .gitignore ├── application ├── .htaccess ├── cache │ ├── .htaccess │ └── index.html ├── config │ ├── autoload.php │ ├── config.php │ ├── constants.php │ ├── database.php │ ├── doctypes.php │ ├── foreign_chars.php │ ├── hooks.php │ ├── index.html │ ├── memcached.php │ ├── migration.php │ ├── mimes.php │ ├── profiler.php │ ├── routes.php │ ├── smileys.php │ └── user_agents.php ├── controllers │ ├── Auth.php │ ├── Chat.php │ ├── Dashboard.php │ ├── Group.php │ ├── Magazine.php │ ├── User.php │ ├── Welcome.php │ └── index.html ├── core │ └── index.html ├── helpers │ ├── index.html │ └── session_helper.php ├── hooks │ ├── index.html │ └── ssl.php ├── index.html ├── language │ ├── english │ │ └── index.html │ └── index.html ├── libraries │ ├── Template.php │ └── index.html ├── logs │ └── index.html ├── models │ ├── Auth_model.php │ ├── Chat_model.php │ ├── Dashboard_model.php │ ├── Group_model.php │ ├── Magazine_model.php │ ├── Segment_model.php │ ├── User_model.php │ └── index.html ├── third_party │ └── index.html └── views │ ├── auth │ └── index.php │ ├── chat │ ├── group │ │ ├── add.php │ │ ├── chat.php │ │ └── index.php │ ├── index.php │ └── video.php │ ├── dashboard │ ├── admin │ │ └── index.php │ ├── index.js │ └── index.php │ ├── errors │ ├── cli │ │ ├── error_404.php │ │ ├── error_db.php │ │ ├── error_exception.php │ │ ├── error_general.php │ │ ├── error_php.php │ │ └── index.html │ ├── html │ │ ├── error_404.php │ │ ├── error_db.php │ │ ├── error_exception.php │ │ ├── error_general.php │ │ ├── error_php.php │ │ └── index.html │ └── index.html │ ├── index.html │ ├── magazine │ └── index.php │ ├── register │ └── index.php │ ├── template │ ├── chat.php │ ├── login_template.php │ ├── main_template.php │ └── welcome_template.php │ ├── test │ └── index.php │ ├── user │ ├── add.php │ └── setting │ │ └── index.php │ ├── welcome │ └── index.php │ └── welcome_message.php ├── assets ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap-theme.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── camera.css │ ├── chat.css │ ├── chat_admin.css │ ├── easyrtc.css │ ├── font-awesome.css │ ├── font-awesome.min.css │ ├── ie10-viewport-bug-workaround.css │ ├── landing.css │ ├── login │ │ └── signin.css │ ├── pretiffy.css │ ├── signin.css │ └── theme.css ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── icons │ └── favicon.ico ├── images │ ├── easyrtc_logo.png │ ├── logo.png │ └── user_default.png ├── js │ ├── .gitattributes │ ├── .gitignore │ ├── .jshintrc │ ├── .travis.yml │ ├── README.md │ ├── backup │ │ └── jquery.min.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── bower.json │ ├── camera.js │ ├── chat.js │ ├── composer.json │ ├── demo_audio_video_simple.js │ ├── docs.min.js │ ├── easyrtc.js │ ├── gulpfile.js │ ├── holder.js │ ├── holder.min.js │ ├── ie-emulation-modes-warning.js │ ├── ie10-viewport-bug-workaround.js │ ├── jquery.min.js │ ├── latest-v2.js │ ├── loadAndFilter.js │ ├── npm.js │ ├── package.js │ ├── package.json │ ├── prettify.js │ ├── socket.io.js │ ├── src │ │ ├── index.js │ │ ├── lib │ │ │ ├── color.js │ │ │ ├── constants.js │ │ │ ├── dom.js │ │ │ ├── index.js │ │ │ ├── renderers │ │ │ │ ├── canvas.js │ │ │ │ ├── svg-dom.js │ │ │ │ └── svg-text.js │ │ │ ├── scenegraph.js │ │ │ ├── svg.js │ │ │ ├── utils.js │ │ │ └── vendor │ │ │ │ ├── ondomready.js │ │ │ │ ├── polyfills.js │ │ │ │ └── querystring.js │ │ └── meteor │ │ │ ├── package.js │ │ │ └── shim.js │ └── test │ │ ├── .gitignore │ │ ├── detach.html │ │ ├── holder.js │ │ ├── image.jpg │ │ ├── index.html │ │ ├── index.js │ │ ├── phantom.js │ │ ├── renderperf │ │ ├── .gitignore │ │ ├── fps.html │ │ ├── index.html │ │ ├── releases │ │ │ └── holder-master │ │ │ │ └── holder.js │ │ ├── setup.sh │ │ └── testcase.html │ │ └── runner.js ├── less │ ├── animated.less │ ├── bordered-pulled.less │ ├── core.less │ ├── fixed-width.less │ ├── font-awesome.less │ ├── icons.less │ ├── larger.less │ ├── list.less │ ├── mixins.less │ ├── path.less │ ├── rotated-flipped.less │ ├── screen-reader.less │ ├── stacked.less │ └── variables.less └── scss │ ├── _animated.scss │ ├── _bordered-pulled.scss │ ├── _core.scss │ ├── _fixed-width.scss │ ├── _icons.scss │ ├── _larger.scss │ ├── _list.scss │ ├── _mixins.scss │ ├── _path.scss │ ├── _rotated-flipped.scss │ ├── _screen-reader.scss │ ├── _stacked.scss │ ├── _variables.scss │ └── font-awesome.scss ├── chatapp.sql ├── composer.json ├── contributing.md ├── index.php ├── js └── dashboard.js ├── license.txt ├── package.json ├── readme.rst ├── system ├── .htaccess ├── core │ ├── Benchmark.php │ ├── CodeIgniter.php │ ├── Common.php │ ├── Config.php │ ├── Controller.php │ ├── Exceptions.php │ ├── Hooks.php │ ├── Input.php │ ├── Lang.php │ ├── Loader.php │ ├── Log.php │ ├── Model.php │ ├── Output.php │ ├── Router.php │ ├── Security.php │ ├── URI.php │ ├── Utf8.php │ ├── compat │ │ ├── hash.php │ │ ├── index.html │ │ ├── mbstring.php │ │ ├── password.php │ │ └── standard.php │ └── index.html ├── database │ ├── DB.php │ ├── DB_cache.php │ ├── DB_driver.php │ ├── DB_forge.php │ ├── DB_query_builder.php │ ├── DB_result.php │ ├── DB_utility.php │ ├── drivers │ │ ├── cubrid │ │ │ ├── cubrid_driver.php │ │ │ ├── cubrid_forge.php │ │ │ ├── cubrid_result.php │ │ │ ├── cubrid_utility.php │ │ │ └── index.html │ │ ├── ibase │ │ │ ├── ibase_driver.php │ │ │ ├── ibase_forge.php │ │ │ ├── ibase_result.php │ │ │ ├── ibase_utility.php │ │ │ └── index.html │ │ ├── index.html │ │ ├── mssql │ │ │ ├── index.html │ │ │ ├── mssql_driver.php │ │ │ ├── mssql_forge.php │ │ │ ├── mssql_result.php │ │ │ └── mssql_utility.php │ │ ├── mysql │ │ │ ├── index.html │ │ │ ├── mysql_driver.php │ │ │ ├── mysql_forge.php │ │ │ ├── mysql_result.php │ │ │ └── mysql_utility.php │ │ ├── mysqli │ │ │ ├── index.html │ │ │ ├── mysqli_driver.php │ │ │ ├── mysqli_forge.php │ │ │ ├── mysqli_result.php │ │ │ └── mysqli_utility.php │ │ ├── oci8 │ │ │ ├── index.html │ │ │ ├── oci8_driver.php │ │ │ ├── oci8_forge.php │ │ │ ├── oci8_result.php │ │ │ └── oci8_utility.php │ │ ├── odbc │ │ │ ├── index.html │ │ │ ├── odbc_driver.php │ │ │ ├── odbc_forge.php │ │ │ ├── odbc_result.php │ │ │ └── odbc_utility.php │ │ ├── pdo │ │ │ ├── index.html │ │ │ ├── pdo_driver.php │ │ │ ├── pdo_forge.php │ │ │ ├── pdo_result.php │ │ │ ├── pdo_utility.php │ │ │ └── subdrivers │ │ │ │ ├── index.html │ │ │ │ ├── pdo_4d_driver.php │ │ │ │ ├── pdo_4d_forge.php │ │ │ │ ├── pdo_cubrid_driver.php │ │ │ │ ├── pdo_cubrid_forge.php │ │ │ │ ├── pdo_dblib_driver.php │ │ │ │ ├── pdo_dblib_forge.php │ │ │ │ ├── pdo_firebird_driver.php │ │ │ │ ├── pdo_firebird_forge.php │ │ │ │ ├── pdo_ibm_driver.php │ │ │ │ ├── pdo_ibm_forge.php │ │ │ │ ├── pdo_informix_driver.php │ │ │ │ ├── pdo_informix_forge.php │ │ │ │ ├── pdo_mysql_driver.php │ │ │ │ ├── pdo_mysql_forge.php │ │ │ │ ├── pdo_oci_driver.php │ │ │ │ ├── pdo_oci_forge.php │ │ │ │ ├── pdo_odbc_driver.php │ │ │ │ ├── pdo_odbc_forge.php │ │ │ │ ├── pdo_pgsql_driver.php │ │ │ │ ├── pdo_pgsql_forge.php │ │ │ │ ├── pdo_sqlite_driver.php │ │ │ │ ├── pdo_sqlite_forge.php │ │ │ │ ├── pdo_sqlsrv_driver.php │ │ │ │ └── pdo_sqlsrv_forge.php │ │ ├── postgre │ │ │ ├── index.html │ │ │ ├── postgre_driver.php │ │ │ ├── postgre_forge.php │ │ │ ├── postgre_result.php │ │ │ └── postgre_utility.php │ │ ├── sqlite │ │ │ ├── index.html │ │ │ ├── sqlite_driver.php │ │ │ ├── sqlite_forge.php │ │ │ ├── sqlite_result.php │ │ │ └── sqlite_utility.php │ │ ├── sqlite3 │ │ │ ├── index.html │ │ │ ├── sqlite3_driver.php │ │ │ ├── sqlite3_forge.php │ │ │ ├── sqlite3_result.php │ │ │ └── sqlite3_utility.php │ │ └── sqlsrv │ │ │ ├── index.html │ │ │ ├── sqlsrv_driver.php │ │ │ ├── sqlsrv_forge.php │ │ │ ├── sqlsrv_result.php │ │ │ └── sqlsrv_utility.php │ └── index.html ├── fonts │ ├── index.html │ └── texb.ttf ├── helpers │ ├── array_helper.php │ ├── captcha_helper.php │ ├── cookie_helper.php │ ├── date_helper.php │ ├── directory_helper.php │ ├── download_helper.php │ ├── email_helper.php │ ├── file_helper.php │ ├── form_helper.php │ ├── html_helper.php │ ├── index.html │ ├── inflector_helper.php │ ├── language_helper.php │ ├── number_helper.php │ ├── path_helper.php │ ├── security_helper.php │ ├── smiley_helper.php │ ├── string_helper.php │ ├── text_helper.php │ ├── typography_helper.php │ ├── url_helper.php │ └── xml_helper.php ├── index.html ├── language │ ├── english │ │ ├── calendar_lang.php │ │ ├── date_lang.php │ │ ├── db_lang.php │ │ ├── email_lang.php │ │ ├── form_validation_lang.php │ │ ├── ftp_lang.php │ │ ├── imglib_lang.php │ │ ├── index.html │ │ ├── migration_lang.php │ │ ├── number_lang.php │ │ ├── pagination_lang.php │ │ ├── profiler_lang.php │ │ ├── unit_test_lang.php │ │ └── upload_lang.php │ └── index.html └── libraries │ ├── Cache │ ├── Cache.php │ ├── drivers │ │ ├── Cache_apc.php │ │ ├── Cache_dummy.php │ │ ├── Cache_file.php │ │ ├── Cache_memcached.php │ │ ├── Cache_redis.php │ │ ├── Cache_wincache.php │ │ └── index.html │ └── index.html │ ├── Calendar.php │ ├── Cart.php │ ├── Driver.php │ ├── Email.php │ ├── Encrypt.php │ ├── Encryption.php │ ├── Form_validation.php │ ├── Ftp.php │ ├── Image_lib.php │ ├── Javascript.php │ ├── Javascript │ ├── Jquery.php │ └── index.html │ ├── Migration.php │ ├── Pagination.php │ ├── Parser.php │ ├── Profiler.php │ ├── Session │ ├── Session.php │ ├── SessionHandlerInterface.php │ ├── Session_driver.php │ ├── drivers │ │ ├── Session_database_driver.php │ │ ├── Session_files_driver.php │ │ ├── Session_memcached_driver.php │ │ ├── Session_redis_driver.php │ │ └── index.html │ └── index.html │ ├── Table.php │ ├── Trackback.php │ ├── Typography.php │ ├── Unit_test.php │ ├── Upload.php │ ├── User_agent.php │ ├── Xmlrpc.php │ ├── Xmlrpcs.php │ ├── Zip.php │ └── index.html └── uploads ├── 167003.jpg ├── 5Lns4jE.jpg ├── 5Lns4jE1.jpg ├── Desert.jpg ├── FOD-_ActivityDiagram.jpg ├── Jellyfish.jpg ├── LEMBAR_PENGESAHAN_DOSEN_PEMBIMBING_AGUNG.docx ├── Laporan_v10.pdf ├── Laporan_v101.pdf ├── Laporan_v2.docx ├── Laporan_v21.docx ├── Laporan_v22.docx ├── Laporan_v23.docx ├── Laporan_v24.docx ├── Laporan_v25.docx ├── Laporan_v4.pdf ├── ava.jpg ├── ava1.jpg ├── ava2.jpg ├── ava3.jpg ├── ava4.jpg ├── ava5.jpg ├── avatars ├── 1.png ├── 1501904638307.jpg ├── 167003.jpg ├── FOD-_ActivityDiagram.jpg ├── FOD-_ActivityDiagram1.jpg ├── IMG_0199.JPG ├── IMG_20160109_120132_1_1.jpg ├── YO2jGz3.jpg ├── default.jpeg ├── images.png ├── logo.png └── logo1.png ├── eromanga_sensei-sagiri_izumi-anime-(17819).jpg ├── eromanga_sensei-sagiri_izumi-anime-(17819)1.jpg ├── eromanga_sensei-sagiri_izumi-anime-(17835).jpg ├── hqdefault.jpg ├── mpdf.pdf ├── phone-call-icon-759235.png └── starrynight2.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | application/cache/* 4 | !application/cache/index.html 5 | !application/cache/.htaccess 6 | 7 | application/logs/* 8 | !application/logs/index.html 9 | !application/logs/.htaccess 10 | 11 | composer.lock 12 | 13 | user_guide_src/build/* 14 | user_guide_src/cilexer/build/* 15 | user_guide_src/cilexer/dist/* 16 | user_guide_src/cilexer/pycilexer.egg-info/* 17 | /vendor/ 18 | 19 | # IDE Files 20 | #------------------------- 21 | /nbproject/ 22 | .idea/* 23 | 24 | ## Sublime Text cache files 25 | *.tmlanguage.cache 26 | *.tmPreferences.cache 27 | *.stTheme.cache 28 | *.sublime-workspace 29 | *.sublime-project 30 | .editorconfig 31 | .phpintel/ 32 | user_guide/ -------------------------------------------------------------------------------- /application/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 2 | 3 | 4 | Require all denied 5 | 6 | 7 | Deny from all 8 | -------------------------------------------------------------------------------- /application/cache/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | -------------------------------------------------------------------------------- /application/cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/config/doctypes.php: -------------------------------------------------------------------------------- 1 | '', 6 | 'xhtml1-strict' => '', 7 | 'xhtml1-trans' => '', 8 | 'xhtml1-frame' => '', 9 | 'xhtml-basic11' => '', 10 | 'html5' => '', 11 | 'html4-strict' => '', 12 | 'html4-trans' => '', 13 | 'html4-frame' => '', 14 | 'mathml1' => '', 15 | 'mathml2' => '', 16 | 'svg10' => '', 17 | 'svg11' => '', 18 | 'svg11-basic' => '', 19 | 'svg11-tiny' => '', 20 | 'xhtml-math-svg-xh' => '', 21 | 'xhtml-math-svg-sh' => '', 22 | 'xhtml-rdfa-1' => '', 23 | 'xhtml-rdfa-2' => '' 24 | ); 25 | -------------------------------------------------------------------------------- /application/config/foreign_chars.php: -------------------------------------------------------------------------------- 1 | 'ae', 14 | '/ö|œ/' => 'oe', 15 | '/ü/' => 'ue', 16 | '/Ä/' => 'Ae', 17 | '/Ü/' => 'Ue', 18 | '/Ö/' => 'Oe', 19 | '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A', 20 | '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a', 21 | '/Б/' => 'B', 22 | '/б/' => 'b', 23 | '/Ç|Ć|Ĉ|Ċ|Č/' => 'C', 24 | '/ç|ć|ĉ|ċ|č/' => 'c', 25 | '/Д/' => 'D', 26 | '/д/' => 'd', 27 | '/Ð|Ď|Đ|Δ/' => 'Dj', 28 | '/ð|ď|đ|δ/' => 'dj', 29 | '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Э/' => 'E', 30 | '/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|э/' => 'e', 31 | '/Ф/' => 'F', 32 | '/ф/' => 'f', 33 | '/Ĝ|Ğ|Ġ|Ģ|Γ|Г|Ґ/' => 'G', 34 | '/ĝ|ğ|ġ|ģ|γ|г|ґ/' => 'g', 35 | '/Ĥ|Ħ/' => 'H', 36 | '/ĥ|ħ/' => 'h', 37 | '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Ы/' => 'I', 38 | '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|ы|ї/' => 'i', 39 | '/Ĵ/' => 'J', 40 | '/ĵ/' => 'j', 41 | '/Ķ|Κ|К/' => 'K', 42 | '/ķ|κ|к/' => 'k', 43 | '/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L', 44 | '/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l', 45 | '/М/' => 'M', 46 | '/м/' => 'm', 47 | '/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N', 48 | '/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n', 49 | '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O', 50 | '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o', 51 | '/П/' => 'P', 52 | '/п/' => 'p', 53 | '/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R', 54 | '/ŕ|ŗ|ř|ρ|р/' => 'r', 55 | '/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S', 56 | '/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's', 57 | '/Ț|Ţ|Ť|Ŧ|τ|Т/' => 'T', 58 | '/ț|ţ|ť|ŧ|т/' => 't', 59 | '/Þ|þ/' => 'th', 60 | '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U', 61 | '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u', 62 | '/Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ|Й/' => 'Y', 63 | '/ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ|й/' => 'y', 64 | '/В/' => 'V', 65 | '/в/' => 'v', 66 | '/Ŵ/' => 'W', 67 | '/ŵ/' => 'w', 68 | '/Ź|Ż|Ž|Ζ|З/' => 'Z', 69 | '/ź|ż|ž|ζ|з/' => 'z', 70 | '/Æ|Ǽ/' => 'AE', 71 | '/ß/' => 'ss', 72 | '/IJ/' => 'IJ', 73 | '/ij/' => 'ij', 74 | '/Œ/' => 'OE', 75 | '/ƒ/' => 'f', 76 | '/ξ/' => 'ks', 77 | '/π/' => 'p', 78 | '/β/' => 'v', 79 | '/μ/' => 'm', 80 | '/ψ/' => 'ps', 81 | '/Ё/' => 'Yo', 82 | '/ё/' => 'yo', 83 | '/Є/' => 'Ye', 84 | '/є/' => 'ye', 85 | '/Ї/' => 'Yi', 86 | '/Ж/' => 'Zh', 87 | '/ж/' => 'zh', 88 | '/Х/' => 'Kh', 89 | '/х/' => 'kh', 90 | '/Ц/' => 'Ts', 91 | '/ц/' => 'ts', 92 | '/Ч/' => 'Ch', 93 | '/ч/' => 'ch', 94 | '/Ш/' => 'Sh', 95 | '/ш/' => 'sh', 96 | '/Щ/' => 'Shch', 97 | '/щ/' => 'shch', 98 | '/Ъ|ъ|Ь|ь/' => '', 99 | '/Ю/' => 'Yu', 100 | '/ю/' => 'yu', 101 | '/Я/' => 'Ya', 102 | '/я/' => 'ya' 103 | ); 104 | -------------------------------------------------------------------------------- /application/config/hooks.php: -------------------------------------------------------------------------------- 1 | 'redirect_ssl', 17 | 'filename' => 'ssl.php', 18 | 'filepath' => 'hooks' 19 | ); -------------------------------------------------------------------------------- /application/config/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/config/memcached.php: -------------------------------------------------------------------------------- 1 | array( 15 | 'hostname' => '127.0.0.1', 16 | 'port' => '11211', 17 | 'weight' => '1', 18 | ), 19 | ); 20 | -------------------------------------------------------------------------------- /application/config/profiler.php: -------------------------------------------------------------------------------- 1 | my_controller/index 50 | | my-controller/my-method -> my_controller/my_method 51 | */ 52 | $route['default_controller'] = 'auth'; 53 | $route['404_override'] = ''; 54 | $route['translate_uri_dashes'] = false; 55 | 56 | $route['chat/(:num)'] = 'chat/index/(:num)'; 57 | -------------------------------------------------------------------------------- /application/controllers/Dashboard.php: -------------------------------------------------------------------------------- 1 | load->model(['Dashboard_model', 'Chat_model', 'User_model']); 10 | $this->dashboard = $this->Dashboard_model; 11 | $this->chat = $this->Chat_model; 12 | $this->user = $this->User_model; 13 | 14 | checkSession(); 15 | } 16 | 17 | public function index() 18 | { 19 | if ($this->session->userdata('role') == 1) { 20 | $data['record'] = $this->user->get($this->session->userdata('user_id')); 21 | 22 | $this->template->load('template/main_template', 'dashboard/index', $data); 23 | } else { 24 | $data['record'] = $this->db->get('users'); 25 | $this->template->load('template/main_template', 'dashboard/admin/index', $data); 26 | } 27 | } 28 | 29 | public function post() 30 | { 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /application/controllers/Magazine.php: -------------------------------------------------------------------------------- 1 | load->model(['Magazine_model']); 9 | $this->magazine = $this->Magazine_model; 10 | } 11 | 12 | public function index() 13 | { 14 | if (isset($_POST['submit'])) { 15 | $data['messages'] = $this->input->post('messages'); 16 | $data['user_id'] = $this->session->userdata('user_id'); 17 | 18 | $this->db->insert('dashboard', $data); 19 | 20 | redirect('magazine'); 21 | } else { 22 | $data['record'] = $this->magazine->index(); 23 | 24 | $this->template->load('template/main_template', 'magazine/index', $data); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /application/controllers/User.php: -------------------------------------------------------------------------------- 1 | load->model('User_model'); 9 | $this->user = $this->User_model; 10 | } 11 | 12 | public function index() 13 | { 14 | redirect('user/setting'); 15 | } 16 | 17 | public function activate() 18 | { 19 | $id = $this->uri->segment(3); 20 | 21 | $this->db->where('id', $id); 22 | $this->db->update('users', ['is_activated' => '1']); 23 | redirect('dashboard'); 24 | } 25 | 26 | public function add() 27 | { 28 | if (isset($_POST['submit'])) { 29 | echo 1; 30 | } else { 31 | $this->template->load('template/main_template', 'user/add'); 32 | } 33 | } 34 | 35 | public function setting() 36 | { 37 | $id = $this->uri->segment(3); 38 | 39 | if (isset($_POST['submit'])) { 40 | $config['upload_path'] = './uploads/avatars/'; 41 | $config['allowed_types'] = 'gif|jpg|png'; 42 | $config['max_size'] = 1000000; 43 | 44 | /* Identify the config as load the library */ 45 | $this->load->library('upload', $config); 46 | 47 | if (! $this->upload->do_upload('userfile')) 48 | { 49 | $error = array('error' => $this->upload->display_errors()); 50 | 51 | echo $error['error']; 52 | die(); 53 | } else { 54 | $image = array('upload_data' => $this->upload->data()); 55 | 56 | $data['avatar'] = $image['upload_data']['file_name']; 57 | } 58 | 59 | $data['first_name'] = $this->input->post('first_name'); 60 | $data['last_name'] = $this->input->post('last_name'); 61 | $data['email'] = $this->input->post('email'); 62 | $data['username'] = $this->input->post('username'); 63 | $data['password'] = $this->input->post('password'); 64 | 65 | $this->db->where('id', $this->uri->segment(3)); 66 | $this->db->update('users', $data); 67 | 68 | $this->session->set_userdata('avatar', $data['avatar']); 69 | 70 | redirect('dashboard'); 71 | } elseif (isset($_POST['submit_request_photo'])) { 72 | /* Button foto on view */ 73 | $id = $this->uri->segment(3); 74 | 75 | $data['record'] = $this->user->getOne($id)->row_array(); 76 | $data['photo'] = 1; 77 | 78 | $this->template->load('template/main_template', 'user/setting/index', $data); 79 | } else { 80 | /* Button foto on view */ 81 | $id = $this->uri->segment(3); 82 | 83 | $data['record'] = $this->user->getOne($id)->row_array(); 84 | $data['photo'] = 0; 85 | 86 | $this->template->load('template/main_template', 'user/setting/index', $data); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /application/controllers/Welcome.php: -------------------------------------------------------------------------------- 1 | 19 | * @see https://codeigniter.com/user_guide/general/urls.html 20 | */ 21 | public function index() 22 | { 23 | $this->load->view('welcome_message'); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /application/controllers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/core/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/helpers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/helpers/session_helper.php: -------------------------------------------------------------------------------- 1 | session->userdata('login_status'); 7 | if ($session!=='ok') { 8 | redirect('auth/login'); 9 | } 10 | } 11 | 12 | function checkLoginSession() 13 | { 14 | $CI = & get_instance(); 15 | $session = $CI->session->userdata('login_status'); 16 | if ($session=='ok') { 17 | redirect('dashboard'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /application/hooks/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/hooks/ssl.php: -------------------------------------------------------------------------------- 1 | router->fetch_class(); 6 | $exclude = array('client'); // add more controller name to exclude ssl. 7 | if(!in_array($class,$exclude)) { 8 | // redirecting to ssl. 9 | $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']); 10 | if ($_SERVER['SERVER_PORT'] != 443) redirect($CI->uri->uri_string()); 11 | } else { 12 | // redirecting with no ssl. 13 | $CI->config->config['base_url'] = str_replace('https://', 'http://', $CI->config->config['base_url']); 14 | if ($_SERVER['SERVER_PORT'] == 443) redirect($CI->uri->uri_string()); 15 | } 16 | } -------------------------------------------------------------------------------- /application/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/language/english/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/language/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/libraries/Template.php: -------------------------------------------------------------------------------- 1 | template_data[$name] = $value; 11 | } 12 | 13 | function load($template = '', $view = '' , $view_data = array(), $return = FALSE) 14 | { 15 | $this->CI =& get_instance(); 16 | $this->set('contents', $this->CI->load->view($view, $view_data, TRUE)); 17 | return $this->CI->load->view($template, $this->template_data, $return); 18 | } 19 | } 20 | 21 | /* End of file Template.php */ 22 | /* Location: ./system/application/libraries/Template.php */ -------------------------------------------------------------------------------- /application/libraries/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/logs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/models/Auth_model.php: -------------------------------------------------------------------------------- 1 | db->get_where('users', ['username' => $username, 'password' => $password]); 14 | 15 | $data = $user->row_array(); 16 | $user_array = $user->row_array(); 17 | 18 | if ($user->num_rows() > 0) { 19 | if ($user_array['is_activated'] == '1') { 20 | $this->session->set_userdata([ 21 | 'user_id' => $data['id'], 22 | 'first_name' => $data['first_name'], 23 | 'avatar' => $data['avatar'], 24 | 'role' => $data['role'] 25 | ]); 26 | return 1; 27 | } else { 28 | $this->session->set_userdata('error', 'Silahkan minta admin untuk memberikan verifikasi terhadap akun anda!!'); 29 | redirect('auth/login'); 30 | } 31 | } else { 32 | return 0; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /application/models/Chat_model.php: -------------------------------------------------------------------------------- 1 | db->insert('chats', $data); 22 | 23 | if ($chat) { 24 | return 1; 25 | } else { 26 | return 0; 27 | } 28 | } 29 | 30 | /** 31 | * Description 32 | * @param int $chat_id 33 | * @param int $user_id 34 | * @param text $content 35 | * @return array 36 | */ 37 | public function add_chat_message($chat_id, $user_id, $content) 38 | { 39 | $query = "INSERT INTO chats_messages (chat_id, user_id, content) VALUES (?, ?, ?)"; 40 | 41 | return $this->db->query($query, array($chat_id, $user_id, $content)); 42 | } 43 | 44 | public function get_chats_messages($chat_id, $last_chat_message_id = 0) 45 | { 46 | $query = "SELECT 47 | cm.id, 48 | cm.user_id, 49 | cm.content, 50 | DATE_FORMAT(cm.created_at, '%D of %M %Y at %H:%i:%s') AS timestamp, 51 | cm.is_image, 52 | cm.is_doc, 53 | u.username, 54 | u.first_name, 55 | u.last_name 56 | FROM 57 | chats_messages AS cm 58 | JOIN 59 | users AS u 60 | ON 61 | cm.user_id = u.id 62 | WHERE 63 | cm.chat_id = ? 64 | AND 65 | cm.id > ? 66 | ORDER BY 67 | cm.id 68 | ASC"; 69 | 70 | $result = $this->db->query($query, [$chat_id, $last_chat_message_id]); 71 | 72 | return $result; 73 | } 74 | 75 | public function getOne($id) 76 | { 77 | return $this->db->get_where('chats', ['id' => $id]); 78 | } 79 | 80 | public function get() 81 | { 82 | $this->db->select('chats.*, users.username'); 83 | $this->db->from('chats as chats, users as users'); 84 | $this->db->where('chats.user_id = users.id'); 85 | return $this->db->get(); 86 | } 87 | 88 | public function obtain($topic) 89 | { 90 | return $this->db->get_where('chats', ['topic' => $topic]); 91 | } 92 | 93 | } 94 | -------------------------------------------------------------------------------- /application/models/Dashboard_model.php: -------------------------------------------------------------------------------- 1 | db->select('*'); 13 | $this->db->from('chats'); 14 | return $this->db->get(); 15 | } 16 | 17 | // public function getAll() 18 | // { 19 | // $query = "SELECT 20 | // uc.id, 21 | // uc.user_id, 22 | // uc.chat_id, 23 | // ct.topic, 24 | // ct.created_at, 25 | // us.username 26 | // FROM 27 | // users_chats AS uc, 28 | // chats AS ct, 29 | // users AS us 30 | // WHERE 31 | // uc.chat_id = ct.id 32 | // AND 33 | // uc.user_id = us.id"; 34 | // return $this->db->query($query); 35 | // } 36 | 37 | } -------------------------------------------------------------------------------- /application/models/Group_model.php: -------------------------------------------------------------------------------- 1 | db->select('group.*, chats.*'); 12 | $this->db->from('groups_chats as group, chats as chats'); 13 | $this->db->where('group.chat_id = chats.id'); 14 | return $this->db->get(); 15 | } 16 | 17 | public function check($user_id, $chat_id) 18 | { 19 | $check = $this->db->get_where('groups_members', ['chat_id' => $chat_id, 'user_id' => $user_id]); 20 | 21 | if ($check->num_rows() > 0) { 22 | return 1; 23 | } else { 24 | return 0; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /application/models/Magazine_model.php: -------------------------------------------------------------------------------- 1 | db->query($query); 15 | } 16 | } -------------------------------------------------------------------------------- /application/models/Segment_model.php: -------------------------------------------------------------------------------- 1 | db->insert('uri_segments', $data); 13 | 14 | if ($segment) { 15 | return 1; 16 | } else { 17 | return 0; 18 | } 19 | } 20 | 21 | public function select($first, $second) 22 | { 23 | $query = "SELECT 24 | * 25 | FROM 26 | uri_segments AS uri 27 | WHERE 28 | (first = $first 29 | AND 30 | second = $second) 31 | OR 32 | (first = $second 33 | AND 34 | second = $first)"; 35 | 36 | return $this->db->query($query); 37 | } 38 | 39 | /** 40 | * Locate the id on uri_segments table 41 | * @param int $first_id 42 | * @param int $second_id 43 | * @return bool 44 | */ 45 | public function locate($first_id, $second_id) 46 | { 47 | $query = "SELECT 48 | * 49 | FROM 50 | uri_segments AS uri 51 | WHERE 52 | (first = '$first_id' 53 | AND 54 | second = '$second_id') 55 | OR 56 | (first = '$second_id' 57 | AND 58 | second = '$first_id') 59 | ORDER BY 60 | uri.id 61 | DESC"; 62 | 63 | $record_array = $this->db->query($query)->row_array(); 64 | $this->session->set_userdata(['chat_id' => $record_array['chat_id']]); 65 | 66 | $result = $this->db->query($query)->num_rows(); 67 | 68 | if ($result > 0) { 69 | return 1; 70 | } else { 71 | return 0; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /application/models/User_model.php: -------------------------------------------------------------------------------- 1 | db->select(); 13 | $this->db->from('users as users'); 14 | $this->db->where('users.id != ', $user_id); 15 | $this->db->where('users.id != 0'); 16 | return $this->db->get(); 17 | } 18 | 19 | public function getOne($id) 20 | { 21 | $this->db->where('id', $id); 22 | return $this->db->get('users'); 23 | } 24 | 25 | public function logged($user_id) 26 | { 27 | $this->db->where('id', $user_id); 28 | $this->db->update('users', ['is_logged_in' => 1, 'last_login' => date('Y-m-d')]); 29 | 30 | return 1; 31 | } 32 | } -------------------------------------------------------------------------------- /application/models/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/third_party/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/auth/index.php: -------------------------------------------------------------------------------- 1 | 'form-signin']); 3 | 4 | echo $error; 5 | $this->session->unset_userdata('error'); 6 | ?> 7 |

Post Chat

8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 21 | 22 | 23 |
Username 13 | 14 |
Password 19 | 20 |
24 |
25 | 'btn btn-lg btn-info btn-block']); ?> 26 | -------------------------------------------------------------------------------- /application/views/chat/group/add.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Nama Grup
11 | -------------------------------------------------------------------------------- /application/views/chat/group/chat.php: -------------------------------------------------------------------------------- 1 |

Grup Chat

2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 24 | 25 | 26 |
7 |
8 | 9 |
10 |
17 |
18 | 19 | 20 | 'Send this chat message', 'id' => 'submit_message', 'class' => 'btn btn-default btn-sm')); ?> 21 |
22 |
23 |
27 | 28 | -------------------------------------------------------------------------------- /application/views/chat/group/index.php: -------------------------------------------------------------------------------- 1 |

Daftar Chat Group

2 | 'btn btn-primary btn-sm']); ?> 3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | result() as $r) { 21 | $no++; 22 | echo " 23 | 24 | 25 | 26 | 27 | 30 | "; 31 | } 32 | ?> 33 | 34 |
NoNama GrupDibuat OlehJumlah MemberAksi
$no$r->topic$r->created_by$r->total_member". 28 | anchor('group/check/'. $r->chat_id, 'Chat', ['class' => 'btn btn-success btn-sm']) 29 | ."
35 |

36 | 37 | -------------------------------------------------------------------------------- /application/views/chat/video.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/dashboard/admin/index.php: -------------------------------------------------------------------------------- 1 |

Daftar User

2 | 3 |

4 | 5 | 6 | 7 | 8 | 16 | result() as $r) { 21 | if ($r->is_activated == 1) { 22 | $aktif_status = 'Aktif'; 23 | $button_activate = ''; 24 | } else { 25 | $aktif_status = 'Belum Aktif'; 26 | $button_activate = anchor('user/activate/'.$r->id, 'Aktifkan!', ['class' => 'btn btn-success btn-sm']); 27 | } 28 | $no++; 29 | echo " 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 40 | "; 41 | } 42 | ?> 43 |
NoUsername 9 | Email 10 | Nama Depan 11 | Nama Belakang 12 | Divisi 13 | Status Keaktifan 14 | Aksi 15 |
$no$r->username$r->email$r->first_name$r->last_name$r->division$aktif_status". 38 | $button_activate 39 | ."
-------------------------------------------------------------------------------- /application/views/dashboard/index.js: -------------------------------------------------------------------------------- 1 | this is js -------------------------------------------------------------------------------- /application/views/dashboard/index.php: -------------------------------------------------------------------------------- 1 |

Daftar Kontak

2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | result() as $r) { 20 | $no++; 21 | 22 | if ($r->is_logged_in == 1) { 23 | $logged_status = ' > Online'; 24 | } else { 25 | $logged_status = 'Offline'; 26 | } 27 | 28 | echo " 29 | 30 | 31 | 32 | 33 | "; 34 | } 35 | ?> 36 | 37 |
NoUsernameStatusAksi
$no$r->username$logged_status". anchor('chat/redirect/'.$this->session->userdata('user_id').'/'.$r->id, 'Chat', ['class' => 'btn btn-primary btn-sm']) ."
38 |

39 | 40 | -------------------------------------------------------------------------------- /application/views/errors/cli/error_404.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | An uncaught Exception was encountered 4 | 5 | Type: 6 | Message: 7 | Filename: getFile(), "\n"; ?> 8 | Line Number: getLine(); ?> 9 | 10 | 11 | 12 | Backtrace: 13 | getTrace() as $error): ?> 14 | 15 | File: 16 | Line: 17 | Function: 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /application/views/errors/cli/error_general.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | A PHP Error was encountered 4 | 5 | Severity: 6 | Message: 7 | Filename: 8 | Line Number: 9 | 10 | 11 | 12 | Backtrace: 13 | 14 | 15 | File: 16 | Line: 17 | Function: 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /application/views/errors/cli/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/errors/html/error_404.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 404 Page Not Found 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /application/views/errors/html/error_db.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Database Error 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /application/views/errors/html/error_exception.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |

An uncaught Exception was encountered

8 | 9 |

Type:

10 |

Message:

11 |

Filename: getFile(); ?>

12 |

Line Number: getLine(); ?>

13 | 14 | 15 | 16 |

Backtrace:

17 | getTrace() as $error): ?> 18 | 19 | 20 | 21 |

22 | File:
23 | Line:
24 | Function: 25 |

26 | 27 | 28 | 29 | 30 | 31 | 32 |
-------------------------------------------------------------------------------- /application/views/errors/html/error_general.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Error 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /application/views/errors/html/error_php.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |

A PHP Error was encountered

8 | 9 |

Severity:

10 |

Message:

11 |

Filename:

12 |

Line Number:

13 | 14 | 15 | 16 |

Backtrace:

17 | 18 | 19 | 20 | 21 |

22 | File:
23 | Line:
24 | Function: 25 |

26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
-------------------------------------------------------------------------------- /application/views/errors/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/errors/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /application/views/magazine/index.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | result() AS $r) { 21 | echo " 22 | 23 | 24 | 25 | "; 26 | } 27 | ?> 28 |
Sticky Notes
Tanggal
Nama
Pesan
$r->created_at$r->first_name$r->messages
-------------------------------------------------------------------------------- /application/views/register/index.php: -------------------------------------------------------------------------------- 1 | 2 |

Form Registrasi

3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 37 | 38 | 39 | 40 |
FIRSTNAME
LASTNAME
DIVISION
EMAIL
USERNAME
PASSWORD
34 | 35 | 'btn btn-danger btn-sm']); ?> 36 |
-------------------------------------------------------------------------------- /application/views/template/chat.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Chat App 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | -------------------------------------------------------------------------------- /application/views/template/login_template.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Chat App 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 36 | 37 |
38 | 39 | 40 | 41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /application/views/test/index.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /application/views/user/add.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/application/views/user/add.php -------------------------------------------------------------------------------- /application/views/user/setting/index.php: -------------------------------------------------------------------------------- 1 | uri->segment(3)); ?> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 35 | 44 | 45 | 46 | 49 | 50 | 51 |
Pengaturan Identitas Diri
Nama Depan
Nama Belakang
Email
Username
Password 28 | 29 |
33 | Foto 34 | 36 | '; 39 | } else { 40 | echo ''; 41 | } 42 | ?> 43 |
47 | 48 |
52 | -------------------------------------------------------------------------------- /application/views/welcome/index.php: -------------------------------------------------------------------------------- 1 |

2 |

3 | SELAMAT DATANG DI APLIKASI POST CHAT INDONESIA
4 | SILAHKAN LOGIN TERLEBIH DAHULU SEBELUM
5 | MENJALANKAN APLIKASI INI
6 |

7 |

-------------------------------------------------------------------------------- /application/views/welcome_message.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Welcome to CodeIgniter 8 | 9 | 67 | 68 | 69 | 70 |
71 |

Welcome to CodeIgniter!

72 | 73 |
74 |

The page you are looking at is being generated dynamically by CodeIgniter.

75 | 76 |

If you would like to edit this page you'll find it located at:

77 | application/views/welcome_message.php 78 | 79 |

The corresponding controller for this page is found at:

80 | application/controllers/Welcome.php 81 | 82 |

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.

83 |
84 | 85 | 86 |
87 | 88 | 89 | -------------------------------------------------------------------------------- /assets/css/camera.css: -------------------------------------------------------------------------------- 1 | #container { 2 | margin: 0px auto; 3 | width: 320px; 4 | height: 480px; 5 | border: 3px #333 solid; 6 | background-color: #666; 7 | } 8 | 9 | #localVideo { 10 | width: 320px; 11 | height: 200px; 12 | background-color: #666; 13 | } 14 | 15 | .videoContainer { 16 | width: 320px; 17 | height: 200px; 18 | background-color: #666; 19 | } 20 | .videoContainer video { 21 | width: 320px; 22 | height: 200px; 23 | background-color: #666; 24 | } -------------------------------------------------------------------------------- /assets/css/chat.css: -------------------------------------------------------------------------------- 1 | div#chat_viewport { 2 | font-family: Verdana, Arial, sans-serif; 3 | padding: 20px; 4 | border-top: 2px dashed #585858; 5 | min-height: 390px; 6 | color: black; 7 | max-height: 280px; 8 | overflow: auto; 9 | margin-bottom: 10px; 10 | width: 750px; 11 | } 12 | 13 | div#chat_viewport ul { 14 | list-style-type: none; 15 | padding-left: 10px; 16 | } 17 | 18 | div#chat_viewport ul li { 19 | margin-top: 10px; 20 | width: 85%; 21 | } 22 | 23 | span.chat_message_header { 24 | font-size: 0.7em; 25 | font-family: "MS Trebuchet", Arial, sans-serif; 26 | color: #547980; 27 | } 28 | 29 | p.message_content { 30 | margin-top: 0px; 31 | margin-bottom: 5px; 32 | padding-left: 10px; 33 | margin-right: 0px; 34 | } 35 | 36 | input#chat_message { 37 | margin-top: 5px; 38 | border: 1px solid #585858; 39 | width: 70%; 40 | font-size: 1.2em; 41 | margin-right: 10px; 42 | } 43 | 44 | input#submit_message { 45 | font-size: 2em; 46 | padding: 5px 10px; 47 | vertical-align: top; 48 | margin-top: 5px; 49 | } 50 | 51 | div#chat_input { 52 | margin-bottom: 10px; 53 | } 54 | 55 | div#chat_viewport ul li.by_current_user span.chat_message_header { 56 | color: #e9561b; 57 | } 58 | 59 | div#container { 60 | margin: 0px auto; 61 | width: 327.5px; 62 | height: 400px; 63 | border: 3px #333 solid; 64 | background-color: #666; 65 | } -------------------------------------------------------------------------------- /assets/css/chat_admin.css: -------------------------------------------------------------------------------- 1 | div#chat_viewport { 2 | font-family: Verdana, Arial, sans-serif; 3 | padding: 20px; 4 | border-top: 2px dashed #585858; 5 | min-height: 400px; 6 | color: black; 7 | max-height: 300px; 8 | overflow: auto; 9 | margin-bottom: 10px; 10 | width: 1100px; 11 | } 12 | 13 | div#chat_viewport ul { 14 | list-style-type: none; 15 | padding-left: 10px; 16 | } 17 | 18 | div#chat_viewport ul li { 19 | margin-top: 10px; 20 | width: 85%; 21 | } 22 | 23 | span.chat_message_header { 24 | font-size: 0.7em; 25 | font-family: "MS Trebuchet", Arial, sans-serif; 26 | color: #547980; 27 | } 28 | 29 | p.message_content { 30 | margin-top: 0px; 31 | margin-bottom: 5px; 32 | padding-left: 10px; 33 | margin-right: 0px; 34 | } 35 | 36 | input#chat_message { 37 | margin-top: 5px; 38 | border: 1px solid #585858; 39 | width: 70%; 40 | font-size: 1.2em; 41 | margin-right: 10px; 42 | } 43 | 44 | input#submit_message { 45 | font-size: 2em; 46 | padding: 5px 10px; 47 | vertical-align: top; 48 | margin-top: 5px; 49 | } 50 | 51 | div#chat_input { 52 | margin-bottom: 10px; 53 | } 54 | 55 | div#chat_viewport ul li.by_current_user span.chat_message_header { 56 | color: #e9561b; 57 | } 58 | 59 | div#container { 60 | margin: 0px auto; 61 | width: 327.5px; 62 | height: 410px; 63 | border: 3px #333 solid; 64 | background-color: #666; 65 | } -------------------------------------------------------------------------------- /assets/css/easyrtc.css: -------------------------------------------------------------------------------- 1 | /* 2 | * These styles define the appearance of the default error dialog box. 3 | */ 4 | #easyrtcErrorDialog { 5 | background-color: #ffe0e0; 6 | 7 | position:fixed; 8 | right: 10px; 9 | top:20px; 10 | z-index: 30; 11 | opacity: 0.95; 12 | padding: 0.5em; 13 | border-radius:10px; 14 | border-color: red; 15 | border-style: solid; 16 | border-width: 1px; 17 | -webkit-box-shadow: 2px 2px 8px 1px rgba(0,0,0,0.9); 18 | box-shadow: 2px 2px 8px 1px rgba(0,0,0,0.9); 19 | } 20 | 21 | .easyrtcErrorDialog_title { 22 | position:static; 23 | text-align:center; 24 | font-size: 18px; 25 | font-weight: bold; 26 | margin-bottom: 0.5em; 27 | clear:both; 28 | } 29 | 30 | #easyrtcErrorDialog_body{ 31 | position:static; 32 | height:150px; 33 | overflow-y:auto; 34 | } 35 | 36 | .easyrtcErrorDialog_element { 37 | position:static; 38 | font-style: italic; 39 | font-size: 12px; 40 | width:300px; 41 | margin-bottom: 0.5em; 42 | clear: both; 43 | float:left; 44 | } 45 | 46 | .easyrtcErrorDialog_okayButton { 47 | position:static; 48 | clear:both; 49 | float:right; 50 | } 51 | 52 | .easyrtcMirror { 53 | -webkit-transform: scaleX(-1); 54 | -moz-transform: scaleX(-1); 55 | -ms-transform: scaleX(-1); 56 | -o-transform: scaleX(-1); 57 | transform: scaleX(-1); 58 | } 59 | 60 | .easyrtc_closeButton { 61 | z-index: 2; 62 | position: absolute; 63 | width: 40px; 64 | height:40px; 65 | right: 0px; 66 | top: 0px; 67 | background-image: url('data:image/svg+xml;utf8, '); 68 | opacity: 0.3; 69 | } 70 | 71 | .easyrtc_closeButton:hover { 72 | opacity: 1; 73 | } 74 | -------------------------------------------------------------------------------- /assets/css/ie10-viewport-bug-workaround.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * IE10 viewport hack for Surface/desktop Windows 8 bug 3 | * Copyright 2014-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | /* 8 | * See the Getting Started docs for more information: 9 | * http://getbootstrap.com/getting-started/#support-ie10-width 10 | */ 11 | @-ms-viewport { width: device-width; } 12 | @-o-viewport { width: device-width; } 13 | @viewport { width: device-width; } 14 | -------------------------------------------------------------------------------- /assets/css/landing.css: -------------------------------------------------------------------------------- 1 | /* 2 | General CSS for easyrtc local landing site. 3 | Only general layout is here. 4 | Any CSS related directly to the operation of a demo is kept in another file. 5 | */ 6 | 7 | body { 8 | background-image:url("../images/bg_light.png"); 9 | font-family:Arial, Helvetica, sans-serif; 10 | } 11 | 12 | #container { 13 | width:960px; 14 | margin-left: auto; 15 | margin-right:auto; 16 | 17 | background-image:url("../images/bg_dark.png"); 18 | background-color:black; 19 | 20 | border-color: #FF6600; 21 | border-width: 1px; 22 | border-style: solid; 23 | border-radius:10px; 24 | } 25 | 26 | #logo_easyrtc { 27 | margin-top:5px; 28 | margin-left:5px; 29 | } 30 | #logo_priologic { 31 | margin-top:5px; 32 | margin-right:5px; 33 | } 34 | 35 | #menu { 36 | text-align: right; 37 | clear: both; 38 | padding-bottom: 2px; 39 | padding-top: 2px; 40 | } 41 | .menu_item { 42 | display: inline; 43 | text-decoration: none; 44 | border-color: gray; 45 | border-width: 2px; 46 | border-style: outset; 47 | color: white; 48 | padding: 0px 3px 0px 3px; 49 | background-color: rgba(0,0,0,.4); 50 | } 51 | .menu_item:hover { 52 | border-style:inset; 53 | background-color: rgba(100,100,100,0); 54 | } 55 | .menu_link { 56 | text-decoration:none; 57 | } 58 | .menu_link:focus { 59 | text-decoration:underline; 60 | } 61 | 62 | 63 | 64 | #main { 65 | background-color:white; 66 | overflow:hidden; 67 | padding-left: 10px; 68 | padding-right: 10px; 69 | } 70 | 71 | #footer { 72 | font-size: small; 73 | padding: 5px; 74 | color:white; 75 | min-height:60px; 76 | } 77 | #footer p { 78 | margin: 0px; 79 | color:white; 80 | text-align:center; 81 | } 82 | #footer a { 83 | color:white; 84 | } 85 | #license { 86 | font-size: x-small; 87 | } 88 | #logo_priologic { 89 | float:left; 90 | padding-top: 10px; 91 | margin-right: 10px; 92 | } 93 | #logo_pb_easyrtc { 94 | float:right; 95 | margin-left: 10px; 96 | } 97 | 98 | 99 | .demo_table { 100 | border-collapse:collapse; 101 | border:1px solid gray; 102 | } 103 | .demo_table th{ 104 | padding:3px; 105 | text-align:left; 106 | } 107 | .demo_table td{ 108 | border-top:1px solid gray; 109 | padding:3px; 110 | } 111 | .demo_table #browser_note{ 112 | text-align:center; 113 | font-size: smaller; 114 | color: gray; 115 | } 116 | 117 | hr { 118 | clear:both; 119 | } 120 | 121 | .prettyprint { 122 | white-space: pre-wrap; 123 | max-height:400px; 124 | overflow-y:scroll; 125 | } -------------------------------------------------------------------------------- /assets/css/login/signin.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 40px; 3 | padding-bottom: 40px; 4 | background-color: #eee; 5 | } 6 | 7 | .form-signin { 8 | max-width: 330px; 9 | padding: 15px; 10 | margin: 0 auto; 11 | } 12 | .form-signin .form-signin-heading, 13 | .form-signin .checkbox { 14 | margin-bottom: 10px; 15 | } 16 | .form-signin .checkbox { 17 | font-weight: normal; 18 | } 19 | .form-signin .form-control { 20 | position: relative; 21 | height: auto; 22 | -webkit-box-sizing: border-box; 23 | -moz-box-sizing: border-box; 24 | box-sizing: border-box; 25 | padding: 10px; 26 | font-size: 16px; 27 | } 28 | .form-signin .form-control:focus { 29 | z-index: 2; 30 | } 31 | .form-signin input[type="email"] { 32 | margin-bottom: -1px; 33 | border-bottom-right-radius: 0; 34 | border-bottom-left-radius: 0; 35 | } 36 | .form-signin input[type="password"] { 37 | margin-bottom: 10px; 38 | border-top-left-radius: 0; 39 | border-top-right-radius: 0; 40 | } 41 | -------------------------------------------------------------------------------- /assets/css/pretiffy.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /assets/css/signin.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 40px; 3 | padding-bottom: 40px; 4 | background-color: #eee; 5 | } 6 | 7 | .form-signin { 8 | max-width: 330px; 9 | padding: 15px; 10 | margin: 0 auto; 11 | } 12 | .form-signin .form-signin-heading, 13 | .form-signin .checkbox { 14 | margin-bottom: 10px; 15 | } 16 | .form-signin .checkbox { 17 | font-weight: normal; 18 | } 19 | .form-signin .form-control { 20 | position: relative; 21 | height: auto; 22 | -webkit-box-sizing: border-box; 23 | -moz-box-sizing: border-box; 24 | box-sizing: border-box; 25 | padding: 10px; 26 | font-size: 16px; 27 | } 28 | .form-signin .form-control:focus { 29 | z-index: 2; 30 | } 31 | .form-signin input[type="email"] { 32 | margin-bottom: -1px; 33 | border-bottom-right-radius: 0; 34 | border-bottom-left-radius: 0; 35 | } 36 | .form-signin input[type="password"] { 37 | margin-bottom: 10px; 38 | border-top-left-radius: 0; 39 | border-top-right-radius: 0; 40 | } 41 | -------------------------------------------------------------------------------- /assets/css/theme.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 70px; 3 | padding-bottom: 30px; 4 | } 5 | 6 | .theme-dropdown .dropdown-menu { 7 | position: static; 8 | display: block; 9 | margin-bottom: 20px; 10 | } 11 | 12 | .theme-showcase > p > .btn { 13 | margin: 5px 0; 14 | } 15 | 16 | .theme-showcase .navbar .container { 17 | width: auto; 18 | } 19 | -------------------------------------------------------------------------------- /assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /assets/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/icons/favicon.ico -------------------------------------------------------------------------------- /assets/images/easyrtc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/images/easyrtc_logo.png -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/user_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/images/user_default.png -------------------------------------------------------------------------------- /assets/js/.gitattributes: -------------------------------------------------------------------------------- 1 | # Automatically normalize line endings for all text-based files 2 | * text=auto 3 | -------------------------------------------------------------------------------- /assets/js/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | todo.md 3 | npm-debug.log 4 | .fuse_hidden* -------------------------------------------------------------------------------- /assets/js/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "quotmark": true, 3 | "boss": true, 4 | "eqnull": true, 5 | "expr": true, 6 | "funcscope": true, 7 | "loopfunc": true, 8 | "smarttabs": true, 9 | "node": true, 10 | "browser": true, 11 | "undef": true, 12 | "unused": true 13 | } 14 | -------------------------------------------------------------------------------- /assets/js/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" 4 | env: 5 | global: 6 | - secure: oFLrNQrXJ5F2XrJ9Fe515PY6JyYbQCHeIVDY+7yc7E90bIZJEb0lVuRGMHrY0Win2WrwdtqdvljMk48YwtY0i6w3z2FbUPn5bNStPMXlxJ9pb6bnXwi1ixNjljveMRo8ZGZYvm66HPYaVn59PUELE4mfIFTYooqdlbGtZTMaRc8= 7 | - secure: qJqn+4QtqjPlKe0vkZlYPUXLE9xODLt0Azs1A4vu4SJoI4jtU6BBcccAkG232JAKC2GiLG5daMMeDMRoUCXHANqyQBf0i/ep56DGwVncmrdNVcGubZdcR8Blj6Ib+aHUgXS0sRrX5PETCBv7t+FZVIzQM4Acq1OiPQEAnTWqAmM= 8 | addons: 9 | sauce_connect: true 10 | sudo: false 11 | install: 12 | - npm install -g gulp 13 | - npm install 14 | - gulp 15 | -------------------------------------------------------------------------------- /assets/js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "holderjs", 3 | "main": "holder.js", 4 | "license": "MIT" 5 | } 6 | -------------------------------------------------------------------------------- /assets/js/camera.js: -------------------------------------------------------------------------------- 1 | var video = document.querySelector("#videoElement"); 2 | 3 | navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia; 4 | 5 | if (navigator.getUserMedia) { 6 | navigator.getUserMedia({video: true}, handleVideo, videoError); 7 | } 8 | 9 | function handleVideo(stream) { 10 | video.src = window.URL.createObjectURL(stream); 11 | } 12 | 13 | function videoError(e) { 14 | // do something 15 | } -------------------------------------------------------------------------------- /assets/js/chat.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | if (Notification.permission !== "granted") { 4 | Notification.requestPermission(); 5 | } 6 | 7 | if (!Notification) { 8 | alert('Desktop notifications not available in your browser. Try Chromium.'); 9 | return; 10 | } 11 | 12 | setInterval(function() { 13 | get_chats_messages(); 14 | }, 2500); 15 | 16 | $("input#chat_message").keypress(function(e) { 17 | if (e.which == 13) { 18 | 19 | $("a#submit_message").click(); 20 | 21 | return false; 22 | 23 | } 24 | }); 25 | 26 | $("a#submit_message").click(function(e) { 27 | e.preventDefault(); 28 | 29 | var content = $("input#chat_message").val(); 30 | 31 | var userfile = $("input#userfile").val(); 32 | 33 | if (content == "") return false; 34 | 35 | $.post(base_url + "index.php/chat/ajax_add_chat_message", { content: content, chat_id: chat_id, user_id: user_id }, function(data) { 36 | 37 | /* Condition */ 38 | if (data.status == 'ok') { 39 | 40 | var current_content = $("div#chat_viewport").html(); 41 | 42 | $("div#chat_viewport").html(current_content + data.content); 43 | 44 | /* Scroll each time you submit new message */ 45 | $('div#chat_viewport').scrollTop($('div#chat_viewport')[0].scrollHeight); 46 | 47 | } else { 48 | /* Error here */ 49 | } 50 | 51 | }, "json"); 52 | 53 | $("input#chat_message").val(""); 54 | 55 | return false; 56 | }); 57 | 58 | function get_chats_messages() 59 | { 60 | $.post(base_url + "index.php/chat/ajax_get_chats_messages", { chat_id: chat_id }, function(data) { 61 | 62 | /* Condition */ 63 | if (data.status == 'ok') { 64 | console.log(current_content); 65 | var current_content = $("div#chat_viewport").html(); 66 | 67 | $("div#chat_viewport").html(current_content + data.content); 68 | 69 | if (!data.content == '') { 70 | var notification = new Notification('Notification title', { 71 | icon: '', 72 | body: "Ada pesan masuk, silahkan cek!!", 73 | }); 74 | 75 | notification.onclick = function () { 76 | window.open("http://stackoverflow.com/a/13328397/1269037"); 77 | }; 78 | 79 | /* Scroll each time you get new message */ 80 | $('div#chat_viewport').scrollTop($('div#chat_viewport')[0].scrollHeight); 81 | } else { 82 | 83 | } 84 | 85 | 86 | } else { 87 | /* Error here */ 88 | } 89 | 90 | }, "json"); 91 | 92 | return false; 93 | } 94 | 95 | get_chats_messages(); 96 | 97 | }); 98 | 99 | -------------------------------------------------------------------------------- /assets/js/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imsky/holder", 3 | "description": "Client-side image placeholders.", 4 | "homepage": "http://holderjs.com", 5 | "keywords": [ 6 | "images", 7 | "placeholders", 8 | "client-side", 9 | "canvas", 10 | "generation", 11 | "development" 12 | ], 13 | "license": "MIT", 14 | "type": "component", 15 | "authors": [ 16 | { 17 | "name": "Ivan Malopinsky", 18 | "homepage": "http://imsky.co" 19 | } 20 | ], 21 | "require": { 22 | "robloach/component-installer": "*" 23 | }, 24 | "extra": { 25 | "component": { 26 | "scripts": [ 27 | "holder.js" 28 | ], 29 | "files": [ 30 | "holder.min.js" 31 | ] 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/js/demo_audio_video_simple.js: -------------------------------------------------------------------------------- 1 | var selfEasyrtcid = ""; 2 | 3 | 4 | function connect() { 5 | easyrtc.setVideoDims(640,480); 6 | easyrtc.setRoomOccupantListener(convertListToButtons); 7 | easyrtc.easyApp("easyrtc.audioVideoSimple", "selfVideo", ["callerVideo"], loginSuccess, loginFailure); 8 | } 9 | 10 | 11 | function clearConnectList() { 12 | var otherClientDiv = document.getElementById('otherClients'); 13 | while (otherClientDiv.hasChildNodes()) { 14 | otherClientDiv.removeChild(otherClientDiv.lastChild); 15 | } 16 | } 17 | 18 | 19 | function convertListToButtons (roomName, data, isPrimary) { 20 | clearConnectList(); 21 | var otherClientDiv = document.getElementById('otherClients'); 22 | for(var easyrtcid in data) { 23 | var button = document.createElement('button'); 24 | button.onclick = function(easyrtcid) { 25 | return function() { 26 | performCall(easyrtcid); 27 | }; 28 | }(easyrtcid); 29 | 30 | var label = document.createTextNode(easyrtc.idToName(easyrtcid)); 31 | button.appendChild(label); 32 | otherClientDiv.appendChild(button); 33 | } 34 | } 35 | 36 | 37 | function performCall(otherEasyrtcid) { 38 | easyrtc.hangupAll(); 39 | 40 | var successCB = function() {}; 41 | var failureCB = function() {}; 42 | easyrtc.call(otherEasyrtcid, successCB, failureCB); 43 | } 44 | 45 | 46 | function loginSuccess(easyrtcid) { 47 | selfEasyrtcid = easyrtcid; 48 | document.getElementById("iam").innerHTML = "I am " + easyrtc.cleanId(easyrtcid); 49 | } 50 | 51 | 52 | function loginFailure(errorCode, message) { 53 | easyrtc.showError(errorCode, message); 54 | } -------------------------------------------------------------------------------- /assets/js/ie-emulation-modes-warning.js: -------------------------------------------------------------------------------- 1 | // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT 2 | // IT'S JUST JUNK FOR OUR DOCS! 3 | // ++++++++++++++++++++++++++++++++++++++++++ 4 | /*! 5 | * Copyright 2014-2015 Twitter, Inc. 6 | * 7 | * Licensed under the Creative Commons Attribution 3.0 Unported License. For 8 | * details, see https://creativecommons.org/licenses/by/3.0/. 9 | */ 10 | // Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes. 11 | (function () { 12 | 'use strict'; 13 | 14 | function emulatedIEMajorVersion() { 15 | var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent) 16 | if (groups === null) { 17 | return null 18 | } 19 | var ieVersionNum = parseInt(groups[1], 10) 20 | var ieMajorVersion = Math.floor(ieVersionNum) 21 | return ieMajorVersion 22 | } 23 | 24 | function actualNonEmulatedIEMajorVersion() { 25 | // Detects the actual version of IE in use, even if it's in an older-IE emulation mode. 26 | // IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx 27 | // @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx 28 | var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line 29 | if (jscriptVersion === undefined) { 30 | return 11 // IE11+ not in emulation mode 31 | } 32 | if (jscriptVersion < 9) { 33 | return 8 // IE8 (or lower; haven't tested on IE<8) 34 | } 35 | return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode 36 | } 37 | 38 | var ua = window.navigator.userAgent 39 | if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) { 40 | return // Opera, which might pretend to be IE 41 | } 42 | var emulated = emulatedIEMajorVersion() 43 | if (emulated === null) { 44 | return // Not IE 45 | } 46 | var nonEmulated = actualNonEmulatedIEMajorVersion() 47 | 48 | if (emulated !== nonEmulated) { 49 | window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!') 50 | } 51 | })(); 52 | -------------------------------------------------------------------------------- /assets/js/ie10-viewport-bug-workaround.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * IE10 viewport hack for Surface/desktop Windows 8 bug 3 | * Copyright 2014-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // See the Getting Started docs for more information: 8 | // http://getbootstrap.com/getting-started/#support-ie10-width 9 | 10 | (function () { 11 | 'use strict'; 12 | 13 | if (navigator.userAgent.match(/IEMobile\/10\.0/)) { 14 | var msViewportStyle = document.createElement('style') 15 | msViewportStyle.appendChild( 16 | document.createTextNode( 17 | '@-ms-viewport{width:auto!important}' 18 | ) 19 | ) 20 | document.querySelector('head').appendChild(msViewportStyle) 21 | } 22 | 23 | })(); 24 | -------------------------------------------------------------------------------- /assets/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /assets/js/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | summary: 'Holder uses SVG to render image placeholders entirely in browser.', 3 | version: '2.9.0', 4 | name: 'imsky:holder', 5 | git: 'https://github.com/imsky/holder', 6 | }); 7 | 8 | Package.onUse(function(api) { 9 | api.versionsFrom('0.9.0'); 10 | api.export('Holder', 'client'); 11 | api.addFiles('holder.js', 'client'); 12 | }); 13 | -------------------------------------------------------------------------------- /assets/js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "holderjs", 3 | "officialName": "Holder", 4 | "version": "2.9.0", 5 | "summary": "client side image placeholders", 6 | "description": "Holder uses SVG to render image placeholders entirely in browser.", 7 | "author": { 8 | "name": "Ivan Malopinsky", 9 | "url": "http://imsky.co" 10 | }, 11 | "homepage": "http://holderjs.com", 12 | "license": "MIT", 13 | "keywords": [ 14 | "images", 15 | "placeholders", 16 | "client-side", 17 | "canvas", 18 | "generation", 19 | "development", 20 | "svg" 21 | ], 22 | "main": "holder.js", 23 | "repository": { 24 | "type": "git", 25 | "url": "git://github.com/imsky/holder.git" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/imsky/holder/issues" 29 | }, 30 | "devDependencies": { 31 | "component-type": "^1.1.0", 32 | "gulp": "^3.9.0", 33 | "gulp-concat": "^2.2.0", 34 | "gulp-header": "^1.0.2", 35 | "gulp-jsbeautifier": "0.0.5", 36 | "gulp-jshint": "^1.6.1", 37 | "gulp-rename": "^1.2.2", 38 | "gulp-replace": "^0.5.3", 39 | "gulp-todo": "^0.3.8", 40 | "gulp-uglify": "^1.2.0", 41 | "gulp-util": "~3", 42 | "moment": "^2.6.0", 43 | "node-http-server": "^3.0.0", 44 | "trim": "0.0.1", 45 | "webdriverio": "^2.4.5", 46 | "webpack-stream": "^2.1.1" 47 | }, 48 | "scripts": { 49 | "test": "node test/index" 50 | }, 51 | "dependencies": { 52 | "shaven": "^0.7.3" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /assets/js/src/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | Holder.js - client side image placeholders 3 | (c) 2012-2015 Ivan Malopinsky - http://imsky.co 4 | */ 5 | 6 | module.exports = require('./lib'); 7 | -------------------------------------------------------------------------------- /assets/js/src/lib/constants.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'version': '%version%', 3 | 'svg_ns': 'http://www.w3.org/2000/svg' 4 | }; -------------------------------------------------------------------------------- /assets/js/src/lib/dom.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Generic new DOM element function 3 | * 4 | * @param tag Tag to create 5 | * @param namespace Optional namespace value 6 | */ 7 | exports.newEl = function(tag, namespace) { 8 | if (!global.document) return; 9 | 10 | if (namespace == null) { 11 | return global.document.createElement(tag); 12 | } else { 13 | return global.document.createElementNS(namespace, tag); 14 | } 15 | }; 16 | 17 | /** 18 | * Generic setAttribute function 19 | * 20 | * @param el Reference to DOM element 21 | * @param attrs Object with attribute keys and values 22 | */ 23 | exports.setAttr = function (el, attrs) { 24 | for (var a in attrs) { 25 | el.setAttribute(a, attrs[a]); 26 | } 27 | }; 28 | 29 | /** 30 | * Creates a XML document 31 | * @private 32 | */ 33 | exports.createXML = function() { 34 | if (!global.DOMParser) return; 35 | return new DOMParser().parseFromString('', 'application/xml'); 36 | }; 37 | 38 | /** 39 | * Converts a value into an array of DOM nodes 40 | * 41 | * @param val A string, a NodeList, a Node, or an HTMLCollection 42 | */ 43 | exports.getNodeArray = function(val) { 44 | var retval = null; 45 | if (typeof(val) == 'string') { 46 | retval = document.querySelectorAll(val); 47 | } else if (global.NodeList && val instanceof global.NodeList) { 48 | retval = val; 49 | } else if (global.Node && val instanceof global.Node) { 50 | retval = [val]; 51 | } else if (global.HTMLCollection && val instanceof global.HTMLCollection) { 52 | retval = val; 53 | } else if (val instanceof Array) { 54 | retval = val; 55 | } else if (val === null) { 56 | retval = []; 57 | } 58 | 59 | retval = Array.prototype.slice.call(retval); 60 | 61 | return retval; 62 | }; 63 | -------------------------------------------------------------------------------- /assets/js/src/lib/renderers/canvas.js: -------------------------------------------------------------------------------- 1 | var DOM = require('../dom'); 2 | var utils = require('../utils'); 3 | 4 | module.exports = (function() { 5 | var canvas = DOM.newEl('canvas'); 6 | var ctx = null; 7 | 8 | return function(sceneGraph) { 9 | if (ctx == null) { 10 | ctx = canvas.getContext('2d'); 11 | } 12 | 13 | var dpr = utils.canvasRatio(); 14 | var root = sceneGraph.root; 15 | canvas.width = dpr * root.properties.width; 16 | canvas.height = dpr * root.properties.height ; 17 | ctx.textBaseline = 'middle'; 18 | 19 | var bg = root.children.holderBg; 20 | var bgWidth = dpr * bg.width; 21 | var bgHeight = dpr * bg.height; 22 | //todo: parametrize outline width (e.g. in scene object) 23 | var outlineWidth = 2; 24 | var outlineOffsetWidth = outlineWidth / 2; 25 | 26 | ctx.fillStyle = bg.properties.fill; 27 | ctx.fillRect(0, 0, bgWidth, bgHeight); 28 | 29 | if (bg.properties.outline) { 30 | //todo: abstract this into a method 31 | ctx.strokeStyle = bg.properties.outline.fill; 32 | ctx.lineWidth = bg.properties.outline.width; 33 | ctx.moveTo(outlineOffsetWidth, outlineOffsetWidth); 34 | // TL, TR, BR, BL 35 | ctx.lineTo(bgWidth - outlineOffsetWidth, outlineOffsetWidth); 36 | ctx.lineTo(bgWidth - outlineOffsetWidth, bgHeight - outlineOffsetWidth); 37 | ctx.lineTo(outlineOffsetWidth, bgHeight - outlineOffsetWidth); 38 | ctx.lineTo(outlineOffsetWidth, outlineOffsetWidth); 39 | // Diagonals 40 | ctx.moveTo(0, outlineOffsetWidth); 41 | ctx.lineTo(bgWidth, bgHeight - outlineOffsetWidth); 42 | ctx.moveTo(0, bgHeight - outlineOffsetWidth); 43 | ctx.lineTo(bgWidth, outlineOffsetWidth); 44 | ctx.stroke(); 45 | } 46 | 47 | var textGroup = root.children.holderTextGroup; 48 | ctx.font = textGroup.properties.font.weight + ' ' + (dpr * textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace'; 49 | ctx.fillStyle = textGroup.properties.fill; 50 | 51 | for (var lineKey in textGroup.children) { 52 | var line = textGroup.children[lineKey]; 53 | for (var wordKey in line.children) { 54 | var word = line.children[wordKey]; 55 | var x = dpr * (textGroup.x + line.x + word.x); 56 | var y = dpr * (textGroup.y + line.y + word.y + (textGroup.properties.leading / 2)); 57 | 58 | ctx.fillText(word.properties.text, x, y); 59 | } 60 | } 61 | 62 | return canvas.toDataURL('image/png'); 63 | }; 64 | })(); -------------------------------------------------------------------------------- /assets/js/src/lib/vendor/querystring.js: -------------------------------------------------------------------------------- 1 | //Modified version of component/querystring 2 | //Changes: updated dependencies, dot notation parsing, JSHint fixes 3 | //Fork at https://github.com/imsky/querystring 4 | 5 | /** 6 | * Module dependencies. 7 | */ 8 | 9 | var encode = encodeURIComponent; 10 | var decode = decodeURIComponent; 11 | var trim = require('trim'); 12 | var type = require('component-type'); 13 | 14 | var arrayRegex = /(\w+)\[(\d+)\]/; 15 | var objectRegex = /\w+\.\w+/; 16 | 17 | /** 18 | * Parse the given query `str`. 19 | * 20 | * @param {String} str 21 | * @return {Object} 22 | * @api public 23 | */ 24 | 25 | exports.parse = function(str){ 26 | if ('string' !== typeof str) return {}; 27 | 28 | str = trim(str); 29 | if ('' === str) return {}; 30 | if ('?' === str.charAt(0)) str = str.slice(1); 31 | 32 | var obj = {}; 33 | var pairs = str.split('&'); 34 | for (var i = 0; i < pairs.length; i++) { 35 | var parts = pairs[i].split('='); 36 | var key = decode(parts[0]); 37 | var m, ctx, prop; 38 | 39 | if (m = arrayRegex.exec(key)) { 40 | obj[m[1]] = obj[m[1]] || []; 41 | obj[m[1]][m[2]] = decode(parts[1]); 42 | continue; 43 | } 44 | 45 | if (m = objectRegex.test(key)) { 46 | m = key.split('.'); 47 | ctx = obj; 48 | 49 | while (m.length) { 50 | prop = m.shift(); 51 | 52 | if (!prop.length) continue; 53 | 54 | if (!ctx[prop]) { 55 | ctx[prop] = {}; 56 | } else if (ctx[prop] && typeof ctx[prop] !== 'object') { 57 | break; 58 | } 59 | 60 | if (!m.length) { 61 | ctx[prop] = decode(parts[1]); 62 | } 63 | 64 | ctx = ctx[prop]; 65 | } 66 | 67 | continue; 68 | } 69 | 70 | obj[parts[0]] = null == parts[1] ? '' : decode(parts[1]); 71 | } 72 | 73 | return obj; 74 | }; 75 | 76 | /** 77 | * Stringify the given `obj`. 78 | * 79 | * @param {Object} obj 80 | * @return {String} 81 | * @api public 82 | */ 83 | 84 | exports.stringify = function(obj){ 85 | if (!obj) return ''; 86 | var pairs = []; 87 | 88 | for (var key in obj) { 89 | var value = obj[key]; 90 | 91 | if ('array' == type(value)) { 92 | for (var i = 0; i < value.length; ++i) { 93 | pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i])); 94 | } 95 | continue; 96 | } 97 | 98 | pairs.push(encode(key) + '=' + encode(obj[key])); 99 | } 100 | 101 | return pairs.join('&'); 102 | }; 103 | -------------------------------------------------------------------------------- /assets/js/src/meteor/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | summary: '%summary%', 3 | version: '%version%', 4 | name: 'imsky:holder', 5 | git: 'https://github.com/imsky/holder', 6 | }); 7 | 8 | Package.onUse(function(api) { 9 | api.versionsFrom('0.9.0'); 10 | api.export('Holder', 'client'); 11 | api.addFiles('holder.js', 'client'); 12 | }); 13 | -------------------------------------------------------------------------------- /assets/js/src/meteor/shim.js: -------------------------------------------------------------------------------- 1 | (function(ctx, isMeteorPackage) { 2 | if (isMeteorPackage) { 3 | Holder = ctx.Holder; 4 | } 5 | })(this, typeof Meteor !== 'undefined' && typeof Package !== 'undefined'); 6 | -------------------------------------------------------------------------------- /assets/js/test/.gitignore: -------------------------------------------------------------------------------- 1 | benchmark.js 2 | lodash.js 3 | require.js 4 | test.js 5 | ua-parser.js 6 | *.svg 7 | *.woff 8 | *.ttf 9 | *.png 10 | !index.html 11 | !detach.html 12 | -------------------------------------------------------------------------------- /assets/js/test/detach.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Holder Detached DOM Testing 5 | 6 | 13 | 14 | 15 | 31 | 32 | 33 | 34 |
35 | 36 |
37 | Plain placeholder 38 |
39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /assets/js/test/holder.js: -------------------------------------------------------------------------------- 1 | ../holder.js -------------------------------------------------------------------------------- /assets/js/test/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/assets/js/test/image.jpg -------------------------------------------------------------------------------- /assets/js/test/index.js: -------------------------------------------------------------------------------- 1 | var runner = require('./runner'); 2 | var server = require('node-http-server'); 3 | 4 | server.deploy({ 5 | 'port': 8000, 6 | 'root': __dirname 7 | }); 8 | 9 | runner({ 10 | 'browserName': 'chrome' 11 | }, function (err, retval) { 12 | console.log('Test result: ', retval); 13 | 14 | if (!retval) { 15 | process.exitCode = -1; 16 | } 17 | 18 | process.exit(); 19 | }); -------------------------------------------------------------------------------- /assets/js/test/phantom.js: -------------------------------------------------------------------------------- 1 | var page = require('webpage').create(); 2 | 3 | page.onConsoleMessage = function (message) { 4 | console.log('Page: ', message); 5 | }; 6 | 7 | page.open('index.html', function (status) { 8 | console.log(status); 9 | 10 | if (status === 'success') { 11 | page.render('phantom.png'); 12 | } 13 | 14 | phantom.exit(); 15 | }); 16 | -------------------------------------------------------------------------------- /assets/js/test/renderperf/.gitignore: -------------------------------------------------------------------------------- 1 | releases/* 2 | !releases/holder-master 3 | -------------------------------------------------------------------------------- /assets/js/test/renderperf/fps.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Holder.js Render Benchmark 5 | 6 | 9 | 10 | 11 |
12 |
Test is running…
13 | 14 | 15 | 16 | 40 | 41 | -------------------------------------------------------------------------------- /assets/js/test/renderperf/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Holder.js Render Performance Benchmark 5 | 6 | 7 | 8 | 9 | 58 | 59 | -------------------------------------------------------------------------------- /assets/js/test/renderperf/releases/holder-master/holder.js: -------------------------------------------------------------------------------- 1 | ../../../../holder.js -------------------------------------------------------------------------------- /assets/js/test/renderperf/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | RELEASES=(v1.0 v1.1 v1.2 v1.3 v1.4 v1.5 v1.6 v1.7 v1.8 v1.9 1.9.0 v2.0 v2.1.0 v2.2.0 v2.3.0 v2.3.2 v2.4.0 v2.5.0 v2.5.2 v2.6.0 v2.6.1 v2.7.0 v2.7.1 v2.8.0 v2.8.1 v2.8.2) 4 | 5 | mkdir -p releases 6 | 7 | for release in ${RELEASES[*]} 8 | do 9 | echo "Downloading Holder $release" 10 | wget -qO- https://github.com/imsky/holder/archive/$release.tar.gz | tar xz -C releases/ 11 | done -------------------------------------------------------------------------------- /assets/js/test/renderperf/testcase.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Holder.js Render Benchmark 5 | 6 | 7 | 8 |
Test is running…
9 | 10 | 11 | 40 | 41 | -------------------------------------------------------------------------------- /assets/js/test/runner.js: -------------------------------------------------------------------------------- 1 | var client = require('webdriverio'); 2 | 3 | module.exports = function (options, cb) { 4 | var retval = true; 5 | 6 | client.remote({ 7 | 'user': process.env.SAUCE_USERNAME, 8 | 'key': process.env.SAUCE_ACCESS_KEY, 9 | 'host': 'localhost', 10 | 'port': 4445, 11 | 'desiredCapabilities': { 12 | 'browserName': options.browserName, 13 | 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER, 14 | 'name': 'Holder.js Test', 15 | 'tags': [options.browserName] 16 | } 17 | }) 18 | .init() 19 | .url('http://localhost:8000') 20 | .execute(function () { 21 | var expectImages = document.querySelectorAll('img').length - document.querySelectorAll('img[data-exclude]').length; 22 | var renderedImages = document.querySelectorAll('img[data-holder-rendered]').length; 23 | return {'expected': expectImages, 'rendered': renderedImages}; 24 | }, function (err, ret) { 25 | var expected = ret.value.expected; 26 | var rendered = ret.value.rendered; 27 | console.log('Expected', expected); 28 | console.log('Rendered', rendered); 29 | if (expected !== rendered) { 30 | retval = false; 31 | } 32 | }) 33 | .pause(15 * 1000) 34 | .end(function () { 35 | cb(null, retval); 36 | }); 37 | }; 38 | -------------------------------------------------------------------------------- /assets/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /assets/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /assets/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /assets/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /assets/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /assets/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /assets/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /assets/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /assets/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /assets/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /assets/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /assets/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /assets/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /assets/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /assets/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /assets/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /assets/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /assets/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /assets/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /assets/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "The CodeIgniter framework", 3 | "name": "codeigniter/framework", 4 | "type": "project", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "support": { 8 | "forum": "http://forum.codeigniter.com/", 9 | "wiki": "https://github.com/bcit-ci/CodeIgniter/wiki", 10 | "irc": "irc://irc.freenode.net/codeigniter", 11 | "source": "https://github.com/bcit-ci/CodeIgniter" 12 | }, 13 | "require": { 14 | "php": ">=5.3.7" 15 | }, 16 | "suggest": { 17 | "paragonie/random_compat": "Provides better randomness in PHP 5.x" 18 | }, 19 | "require-dev": { 20 | "mikey179/vfsStream": "1.1.*", 21 | "phpunit/phpunit": "4.* || 5.*" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /js/dashboard.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | function getData() { 4 | 5 | var formData = { 6 | 'id': 1 7 | }; 8 | 9 | console.log(formData['id']); 10 | 11 | $.ajax({ 12 | type: 'POST', 13 | url: '', 14 | data: formData, 15 | async: false, 16 | beforeSend: function (xhr) { 17 | if (xhr && xhr.overrideMimeType) { 18 | xhr.overrideMimeType('application/json;charset=utf-8'); 19 | } 20 | }, 21 | dataType: 'json', 22 | success: function (data) { 23 | //Do stuff with the JSON data 24 | } 25 | }); 26 | } 27 | 28 | getData(); 29 | 30 | }); -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 - 2017, British Columbia Institute of Technology 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chat-app", 3 | "version": "1.0.0", 4 | "description": "Chatting App using the WebRTC concept", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/afiefsky/chatapp-with-codeigniter-ajax.git" 12 | }, 13 | "author": "afiefsky", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/afiefsky/chatapp-with-codeigniter-ajax/issues" 17 | }, 18 | "homepage": "https://github.com/afiefsky/chatapp-with-codeigniter-ajax#readme" 19 | } 20 | -------------------------------------------------------------------------------- /readme.rst: -------------------------------------------------------------------------------- 1 | ################### 2 | ChatApp CodeIgniter Ajax 3 | ################### 4 | 5 | This is an application which I develop back then during college, back then the purpose is to help friend creating a javascript setInterval-based chat application. 6 | Nowadays a chat technology mostly use socket (i.e: socket.io), but this one can be used as basic understanding on how chatapp works without using any npm library. 7 | There is a lot of messy code within controllers, views, even models. A lot of my friend still asked me about this repo even though there is a lot of better simple chat app out there. 8 | Based on that reason, this app will be developed into a very basic one so even my friend can understand about how it works. 9 | -------------------------------------------------------------------------------- /system/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | 8 | RewriteCond %{SERVER_PORT} 80 -------------------------------------------------------------------------------- /system/core/Model.php: -------------------------------------------------------------------------------- 1 | $key; 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /system/core/compat/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/core/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/cubrid/cubrid_utility.php: -------------------------------------------------------------------------------- 1 | db->data_cache['db_names'])) 57 | { 58 | return $this->db->data_cache['db_names']; 59 | } 60 | 61 | return $this->db->data_cache['db_names'] = cubrid_list_dbs($this->db->conn_id); 62 | } 63 | 64 | // -------------------------------------------------------------------- 65 | 66 | /** 67 | * CUBRID Export 68 | * 69 | * @param array Preferences 70 | * @return mixed 71 | */ 72 | protected function _backup($params = array()) 73 | { 74 | // No SQL based support in CUBRID as of version 8.4.0. Database or 75 | // table backup can be performed using CUBRID Manager 76 | // database administration tool. 77 | return $this->db->display_error('db_unsupported_feature'); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /system/database/drivers/cubrid/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/ibase/ibase_utility.php: -------------------------------------------------------------------------------- 1 | db->hostname, $this->db->username, $this->db->password)) 58 | { 59 | $res = ibase_backup($service, $this->db->database, $filename.'.fbk'); 60 | 61 | // Close the service connection 62 | ibase_service_detach($service); 63 | return $res; 64 | } 65 | 66 | return FALSE; 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /system/database/drivers/ibase/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/mssql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/mssql/mssql_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /system/database/drivers/mysql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/mysqli/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/oci8/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/oci8/oci8_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /system/database/drivers/odbc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/odbc/odbc_forge.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /system/database/drivers/pdo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/pdo/pdo_forge.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /system/database/drivers/pdo/subdrivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/postgre/postgre_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /system/database/drivers/sqlite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/sqlite/sqlite_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /system/database/drivers/sqlite3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/sqlite3/sqlite3_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /system/database/drivers/sqlsrv/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/database/drivers/sqlsrv/sqlsrv_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /system/database/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/fonts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/fonts/texb.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/system/fonts/texb.ttf -------------------------------------------------------------------------------- /system/helpers/email_helper.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/helpers/language_helper.php: -------------------------------------------------------------------------------- 1 | lang->line($line); 67 | 68 | if ($for !== '') 69 | { 70 | $line = ''; 71 | } 72 | 73 | return $line; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /system/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/language/english/ftp_lang.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/language/english/migration_lang.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/Cache/drivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/Cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/Javascript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/Session/SessionHandlerInterface.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/Session/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /system/libraries/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /uploads/167003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/167003.jpg -------------------------------------------------------------------------------- /uploads/5Lns4jE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/5Lns4jE.jpg -------------------------------------------------------------------------------- /uploads/5Lns4jE1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/5Lns4jE1.jpg -------------------------------------------------------------------------------- /uploads/Desert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Desert.jpg -------------------------------------------------------------------------------- /uploads/FOD-_ActivityDiagram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/FOD-_ActivityDiagram.jpg -------------------------------------------------------------------------------- /uploads/Jellyfish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Jellyfish.jpg -------------------------------------------------------------------------------- /uploads/LEMBAR_PENGESAHAN_DOSEN_PEMBIMBING_AGUNG.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/LEMBAR_PENGESAHAN_DOSEN_PEMBIMBING_AGUNG.docx -------------------------------------------------------------------------------- /uploads/Laporan_v10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v10.pdf -------------------------------------------------------------------------------- /uploads/Laporan_v101.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v101.pdf -------------------------------------------------------------------------------- /uploads/Laporan_v2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v2.docx -------------------------------------------------------------------------------- /uploads/Laporan_v21.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v21.docx -------------------------------------------------------------------------------- /uploads/Laporan_v22.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v22.docx -------------------------------------------------------------------------------- /uploads/Laporan_v23.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v23.docx -------------------------------------------------------------------------------- /uploads/Laporan_v24.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v24.docx -------------------------------------------------------------------------------- /uploads/Laporan_v25.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v25.docx -------------------------------------------------------------------------------- /uploads/Laporan_v4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/Laporan_v4.pdf -------------------------------------------------------------------------------- /uploads/ava.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava.jpg -------------------------------------------------------------------------------- /uploads/ava1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava1.jpg -------------------------------------------------------------------------------- /uploads/ava2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava2.jpg -------------------------------------------------------------------------------- /uploads/ava3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava3.jpg -------------------------------------------------------------------------------- /uploads/ava4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava4.jpg -------------------------------------------------------------------------------- /uploads/ava5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/ava5.jpg -------------------------------------------------------------------------------- /uploads/avatars/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/1.png -------------------------------------------------------------------------------- /uploads/avatars/1501904638307.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/1501904638307.jpg -------------------------------------------------------------------------------- /uploads/avatars/167003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/167003.jpg -------------------------------------------------------------------------------- /uploads/avatars/FOD-_ActivityDiagram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/FOD-_ActivityDiagram.jpg -------------------------------------------------------------------------------- /uploads/avatars/FOD-_ActivityDiagram1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/FOD-_ActivityDiagram1.jpg -------------------------------------------------------------------------------- /uploads/avatars/IMG_0199.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/IMG_0199.JPG -------------------------------------------------------------------------------- /uploads/avatars/IMG_20160109_120132_1_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/IMG_20160109_120132_1_1.jpg -------------------------------------------------------------------------------- /uploads/avatars/YO2jGz3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/YO2jGz3.jpg -------------------------------------------------------------------------------- /uploads/avatars/default.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/default.jpeg -------------------------------------------------------------------------------- /uploads/avatars/images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/images.png -------------------------------------------------------------------------------- /uploads/avatars/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/logo.png -------------------------------------------------------------------------------- /uploads/avatars/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/avatars/logo1.png -------------------------------------------------------------------------------- /uploads/eromanga_sensei-sagiri_izumi-anime-(17819).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/eromanga_sensei-sagiri_izumi-anime-(17819).jpg -------------------------------------------------------------------------------- /uploads/eromanga_sensei-sagiri_izumi-anime-(17819)1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/eromanga_sensei-sagiri_izumi-anime-(17819)1.jpg -------------------------------------------------------------------------------- /uploads/eromanga_sensei-sagiri_izumi-anime-(17835).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/eromanga_sensei-sagiri_izumi-anime-(17835).jpg -------------------------------------------------------------------------------- /uploads/hqdefault.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/hqdefault.jpg -------------------------------------------------------------------------------- /uploads/mpdf.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/mpdf.pdf -------------------------------------------------------------------------------- /uploads/phone-call-icon-759235.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/phone-call-icon-759235.png -------------------------------------------------------------------------------- /uploads/starrynight2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afiefsky/chatapp-codeigniter-ajax/86925dc4fbb288731794bbf60cb1f921b0047cac/uploads/starrynight2.jpg --------------------------------------------------------------------------------