From 5d62a2371f96d96d1300af852b0df65e1816233e Mon Sep 17 00:00:00 2001 From: Navin3d Date: Sat, 8 Apr 2023 02:28:56 +0530 Subject: [PATCH] Initial Commit --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 1 + Android/.DS_Store | Bin 0 -> 6148 bytes Android/AuthentiFi/.gitignore | 11 + .../AuthentiFi/.idea/assetWizardSettings.xml | 163 + .../AuthentiFi/.idea/codeStyles/Project.xml | 29 + Android/AuthentiFi/.idea/compiler.xml | 6 + .../.idea/deploymentTargetDropDown.xml | 17 + .../AuthentiFi/.idea/dictionaries/pratz.xml | 3 + Android/AuthentiFi/.idea/gradle.xml | 20 + Android/AuthentiFi/.idea/jarRepositories.xml | 25 + Android/AuthentiFi/.idea/misc.xml | 48 + Android/AuthentiFi/.idea/vcs.xml | 7 + Android/AuthentiFi/app/.gitignore | 1 + Android/AuthentiFi/app/build.gradle | 36 + Android/AuthentiFi/app/proguard-rules.pro | 21 + .../authentifi/ExampleInstrumentedTest.java | 26 + .../app/src/main/AndroidManifest.xml | 62 + .../app/src/main/ic_launcher-web.png | Bin 0 -> 16322 bytes .../com/pratz/authentifi/Assets/Asset.java | 58 + .../pratz/authentifi/Assets/AssetAdapter.java | 89 + .../authentifi/Assets/AssetsFragment.java | 207 + .../pratz/authentifi/ConnectionManager.java | 79 + .../com/pratz/authentifi/MainActivity.java | 329 + .../pratz/authentifi/MyProfileFragment.java | 93 + .../com/pratz/authentifi/ProductPage.java | 244 + .../MainRetailerActivity.java | 105 + .../RetailerHomeFragment.java | 160 + .../authentifi/SellActivity/BuyActivity.java | 89 + .../authentifi/SellActivity/BuyStep1.java | 98 + .../authentifi/SellActivity/BuyStep2.java | 97 + .../authentifi/SellActivity/BuyStep3.java | 78 + .../authentifi/SellActivity/SellActivity.java | 81 + .../authentifi/SellActivity/SellStep0.java | 36 + .../authentifi/SellActivity/SellStep1.java | 104 + .../authentifi/SellActivity/SellStep2.java | 88 + .../pratz/authentifi/User/LoginActivity.java | 179 + .../User/LoginRetailerActivity.java | 182 + .../pratz/authentifi/User/SignupActivity.java | 142 + .../java/com/pratz/authentifi/User/User.java | 21 + .../java/com/pratz/authentifi/Viewfind.java | 122 + .../app/src/main/res/anim/slide_in_down.xml | 5 + .../app/src/main/res/anim/slide_in_right.xml | 5 + .../app/src/main/res/anim/slide_out_down.xml | 5 + .../app/src/main/res/anim/slide_out_left.xml | 5 + .../src/main/res/anim/stay_in_position.xml | 5 + .../main/res/drawable-hdpi/ic_cameraflash.png | Bin 0 -> 365 bytes .../res/drawable-hdpi/ic_chevon_right.png | Bin 0 -> 188 bytes .../main/res/drawable-hdpi/ic_fingerprint.png | Bin 0 -> 1175 bytes .../main/res/drawable-hdpi/ic_myassets.png | Bin 0 -> 530 bytes .../main/res/drawable-hdpi/ic_myprofile.png | Bin 0 -> 487 bytes .../main/res/drawable-mdpi/ic_cameraflash.png | Bin 0 -> 251 bytes .../res/drawable-mdpi/ic_chevon_right.png | Bin 0 -> 133 bytes .../main/res/drawable-mdpi/ic_fingerprint.png | Bin 0 -> 718 bytes .../main/res/drawable-mdpi/ic_myassets.png | Bin 0 -> 352 bytes .../main/res/drawable-mdpi/ic_myprofile.png | Bin 0 -> 341 bytes .../drawable-v24/ic_launcher_foreground.xml | 34 + .../res/drawable-xhdpi/ic_cameraflash.png | Bin 0 -> 419 bytes .../res/drawable-xhdpi/ic_chevon_right.png | Bin 0 -> 215 bytes .../res/drawable-xhdpi/ic_fingerprint.png | Bin 0 -> 1607 bytes .../main/res/drawable-xhdpi/ic_myassets.png | Bin 0 -> 636 bytes .../main/res/drawable-xhdpi/ic_myprofile.png | Bin 0 -> 623 bytes .../res/drawable-xxhdpi/ic_cameraflash.png | Bin 0 -> 616 bytes .../res/drawable-xxhdpi/ic_chevon_right.png | Bin 0 -> 325 bytes .../res/drawable-xxhdpi/ic_fingerprint.png | Bin 0 -> 2556 bytes .../main/res/drawable-xxhdpi/ic_myassets.png | Bin 0 -> 957 bytes .../main/res/drawable-xxhdpi/ic_myprofile.png | Bin 0 -> 953 bytes .../res/drawable-xxxhdpi/ic_cameraflash.png | Bin 0 -> 732 bytes .../res/drawable-xxxhdpi/ic_chevon_right.png | Bin 0 -> 360 bytes .../res/drawable-xxxhdpi/ic_fingerprint.png | Bin 0 -> 3533 bytes .../main/res/drawable-xxxhdpi/ic_myassets.png | Bin 0 -> 1261 bytes .../res/drawable-xxxhdpi/ic_myprofile.png | Bin 0 -> 1357 bytes .../main/res/drawable/ic_account_circle.xml | 5 + .../src/main/res/drawable/ic_cancel_black.xml | 5 + .../res/drawable/ic_check_circle_black.xml | 5 + .../res/drawable/ic_chevron_right_white.xml | 5 + .../src/main/res/drawable/ic_close_black.xml | 5 + .../src/main/res/drawable/ic_close_white.xml | 5 + .../res/drawable/ic_devices_other_black.xml | 5 + .../src/main/res/drawable/ic_error_black.xml | 5 + .../res/drawable/ic_launcher_background.xml | 170 + .../res/drawable/ic_monetization_on_black.xml | 5 + .../res/drawable/ic_report_problem_black.xml | 5 + .../src/main/res/drawable/ic_viewproduct.xml | 5 + .../src/main/res/drawable/navbar_colour.xml | 6 + .../app/src/main/res/layout/activity_buy.xml | 9 + .../src/main/res/layout/activity_login.xml | 107 + .../res/layout/activity_login_retailer.xml | 9 + .../app/src/main/res/layout/activity_main.xml | 73 + .../res/layout/activity_main_retailer.xml | 63 + .../main/res/layout/activity_product_page.xml | 254 + .../app/src/main/res/layout/activity_sell.xml | 51 + .../src/main/res/layout/activity_signup.xml | 113 + .../src/main/res/layout/activity_viewfind.xml | 48 + .../app/src/main/res/layout/asset_item.xml | 65 + .../app/src/main/res/layout/buy_item.xml | 38 + .../src/main/res/layout/fragment_assets.xml | 72 + .../main/res/layout/fragment_buy_step0.xml | 60 + .../main/res/layout/fragment_buy_step1.xml | 26 + .../main/res/layout/fragment_buy_step2.xml | 14 + .../main/res/layout/fragment_myprofile.xml | 221 + .../res/layout/fragment_retailer_home.xml | 71 + .../main/res/layout/fragment_sell_step0.xml | 60 + .../main/res/layout/fragment_sell_step1.xml | 23 + .../main/res/layout/fragment_sell_step2.xml | 34 + .../main/res/layout/progressbar_loading.xml | 19 + .../app/src/main/res/menu/menu_main.xml | 10 + .../app/src/main/res/menu/navigation_menu.xml | 20 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1374 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1257 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3349 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1029 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 799 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2111 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1971 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 1783 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4749 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3024 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3093 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 7407 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 4305 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4743 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10752 bytes .../app/src/main/res/values/colors.xml | 15 + .../app/src/main/res/values/dimens.xml | 8 + .../res/values/ic_launcher_background.xml | 4 + .../app/src/main/res/values/strings.xml | 29 + .../app/src/main/res/values/styles.xml | 27 + .../com/pratz/authentifi/ExampleUnitTest.java | 17 + Android/AuthentiFi/build.gradle | 27 + Android/AuthentiFi/gradle.properties | 15 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54413 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + Android/AuthentiFi/gradlew | 172 + Android/AuthentiFi/gradlew.bat | 84 + Android/AuthentiFi/settings.gradle | 1 + contracts/authentifi.sol | 252 + package-lock.json | 8442 +++++++++++++++++ package.json | 34 + server.js | 984 ++ variables.txt | 1 + views/John/GenerateQR.html | 110 + views/John/Pics/logo.png | Bin 0 -> 16322 bytes views/John/RetailerRegistration.html | 108 + views/John/index.html | 35 + views/John/main.css | 72 + views/John/main.html | 201 + views/John/style1.css | 46 + views/John/why3.html | 126 + views/Pics/logo.png | Bin 0 -> 16322 bytes views/backup/codeResult.html | 21 + views/backup/createCodes.html | 60 + views/backup/createRetailer.html | 44 + views/backup/index.html | 60 + views/backup/main.css | 63 + views/createCodes.html | 108 + views/createRetailer.html | 107 + views/davidshimjs-qrcodejs-04f46c6/.gitignore | 4 + views/davidshimjs-qrcodejs-04f46c6/LICENSE | 14 + views/davidshimjs-qrcodejs-04f46c6/README.md | 46 + views/davidshimjs-qrcodejs-04f46c6/bower.json | 18 + views/davidshimjs-qrcodejs-04f46c6/code.txt | 6 + .../codeResult.html | 21 + .../index-svg.html | 47 + views/davidshimjs-qrcodejs-04f46c6/index.html | 126 + views/davidshimjs-qrcodejs-04f46c6/index.svg | 37 + .../jquery.min.js | 2 + views/davidshimjs-qrcodejs-04f46c6/old.html | 35 + views/davidshimjs-qrcodejs-04f46c6/qrcode.js | 614 ++ .../qrcode.min.js | 1 + views/index.html | 201 + views/main.css | 72 + views/style1.css | 46 + views/why3.html | 123 + 176 files changed, 17608 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 Android/.DS_Store create mode 100644 Android/AuthentiFi/.gitignore create mode 100644 Android/AuthentiFi/.idea/assetWizardSettings.xml create mode 100644 Android/AuthentiFi/.idea/codeStyles/Project.xml create mode 100644 Android/AuthentiFi/.idea/compiler.xml create mode 100644 Android/AuthentiFi/.idea/deploymentTargetDropDown.xml create mode 100644 Android/AuthentiFi/.idea/dictionaries/pratz.xml create mode 100644 Android/AuthentiFi/.idea/gradle.xml create mode 100644 Android/AuthentiFi/.idea/jarRepositories.xml create mode 100644 Android/AuthentiFi/.idea/misc.xml create mode 100644 Android/AuthentiFi/.idea/vcs.xml create mode 100644 Android/AuthentiFi/app/.gitignore create mode 100644 Android/AuthentiFi/app/build.gradle create mode 100644 Android/AuthentiFi/app/proguard-rules.pro create mode 100644 Android/AuthentiFi/app/src/androidTest/java/com/pratz/authentifi/ExampleInstrumentedTest.java create mode 100644 Android/AuthentiFi/app/src/main/AndroidManifest.xml create mode 100644 Android/AuthentiFi/app/src/main/ic_launcher-web.png create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/Asset.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/AssetAdapter.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/AssetsFragment.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/ConnectionManager.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MainActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MyProfileFragment.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/ProductPage.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/MainRetailerActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/RetailerHomeFragment.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep1.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep2.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep3.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep0.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep1.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep2.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginRetailerActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/SignupActivity.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/User.java create mode 100644 Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Viewfind.java create mode 100644 Android/AuthentiFi/app/src/main/res/anim/slide_in_down.xml create mode 100644 Android/AuthentiFi/app/src/main/res/anim/slide_in_right.xml create mode 100644 Android/AuthentiFi/app/src/main/res/anim/slide_out_down.xml create mode 100644 Android/AuthentiFi/app/src/main/res/anim/slide_out_left.xml create mode 100644 Android/AuthentiFi/app/src/main/res/anim/stay_in_position.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_cameraflash.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_chevon_right.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_fingerprint.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_myassets.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_myprofile.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_cameraflash.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_chevon_right.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_fingerprint.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_myassets.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_myprofile.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_cameraflash.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_chevon_right.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_fingerprint.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_myassets.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_myprofile.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_cameraflash.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_chevon_right.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_fingerprint.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_myassets.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_myprofile.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_cameraflash.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_chevon_right.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_fingerprint.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_myassets.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_myprofile.png create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_account_circle.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_cancel_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_check_circle_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_chevron_right_white.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_close_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_close_white.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_devices_other_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_error_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_monetization_on_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_report_problem_black.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/ic_viewproduct.xml create mode 100644 Android/AuthentiFi/app/src/main/res/drawable/navbar_colour.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_buy.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_login.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_login_retailer.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_main.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_main_retailer.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_product_page.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_sell.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_signup.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/activity_viewfind.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/asset_item.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/buy_item.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_assets.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_buy_step0.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_buy_step1.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_buy_step2.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_myprofile.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_retailer_home.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_sell_step0.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_sell_step1.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/fragment_sell_step2.xml create mode 100644 Android/AuthentiFi/app/src/main/res/layout/progressbar_loading.xml create mode 100644 Android/AuthentiFi/app/src/main/res/menu/menu_main.xml create mode 100644 Android/AuthentiFi/app/src/main/res/menu/navigation_menu.xml create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 Android/AuthentiFi/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 Android/AuthentiFi/app/src/main/res/values/colors.xml create mode 100644 Android/AuthentiFi/app/src/main/res/values/dimens.xml create mode 100644 Android/AuthentiFi/app/src/main/res/values/ic_launcher_background.xml create mode 100644 Android/AuthentiFi/app/src/main/res/values/strings.xml create mode 100644 Android/AuthentiFi/app/src/main/res/values/styles.xml create mode 100644 Android/AuthentiFi/app/src/test/java/com/pratz/authentifi/ExampleUnitTest.java create mode 100644 Android/AuthentiFi/build.gradle create mode 100644 Android/AuthentiFi/gradle.properties create mode 100644 Android/AuthentiFi/gradle/wrapper/gradle-wrapper.jar create mode 100644 Android/AuthentiFi/gradle/wrapper/gradle-wrapper.properties create mode 100755 Android/AuthentiFi/gradlew create mode 100755 Android/AuthentiFi/gradlew.bat create mode 100644 Android/AuthentiFi/settings.gradle create mode 100644 contracts/authentifi.sol create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server.js create mode 100644 variables.txt create mode 100644 views/John/GenerateQR.html create mode 100644 views/John/Pics/logo.png create mode 100644 views/John/RetailerRegistration.html create mode 100644 views/John/index.html create mode 100644 views/John/main.css create mode 100644 views/John/main.html create mode 100644 views/John/style1.css create mode 100644 views/John/why3.html create mode 100644 views/Pics/logo.png create mode 100644 views/backup/codeResult.html create mode 100644 views/backup/createCodes.html create mode 100644 views/backup/createRetailer.html create mode 100644 views/backup/index.html create mode 100644 views/backup/main.css create mode 100644 views/createCodes.html create mode 100644 views/createRetailer.html create mode 100644 views/davidshimjs-qrcodejs-04f46c6/.gitignore create mode 100644 views/davidshimjs-qrcodejs-04f46c6/LICENSE create mode 100644 views/davidshimjs-qrcodejs-04f46c6/README.md create mode 100644 views/davidshimjs-qrcodejs-04f46c6/bower.json create mode 100644 views/davidshimjs-qrcodejs-04f46c6/code.txt create mode 100644 views/davidshimjs-qrcodejs-04f46c6/codeResult.html create mode 100644 views/davidshimjs-qrcodejs-04f46c6/index-svg.html create mode 100644 views/davidshimjs-qrcodejs-04f46c6/index.html create mode 100644 views/davidshimjs-qrcodejs-04f46c6/index.svg create mode 100644 views/davidshimjs-qrcodejs-04f46c6/jquery.min.js create mode 100644 views/davidshimjs-qrcodejs-04f46c6/old.html create mode 100644 views/davidshimjs-qrcodejs-04f46c6/qrcode.js create mode 100644 views/davidshimjs-qrcodejs-04f46c6/qrcode.min.js create mode 100644 views/index.html create mode 100644 views/main.css create mode 100644 views/style1.css create mode 100644 views/why3.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..03a10aa80259eba766f2a62cf12d5c74d77ecd4f GIT binary patch literal 6148 zcmeHK%Wl&^6upzC#O^~15=h-3Sz=p4S_%TOF(F;BVACL2019>;1ryg3#ZHYBMamlf zfnQ+Dm+&vF;LM#Vik*ffLUgV)bH+3G%=H}4!$U-(GmQ?2nndIvDXecHyTnwxN-I_~ zH9J7TeZ(}Rlq5}Pu;OhitO8bne@y|kcDJa7bsJNT^n3k2OXO*o$Pn$=9K>hfm!E7r zga$pqN{_J8C0J3}8*N0b_1>Lc-pitw2l+JX z1e4e5>4lU@cu@|*m+_$JH*Y+ZX&%JsV8Vnr8o=evt2m8h(UH?M%9z{J4UX%${pQ|m zcK_&L-#a>dIN$eXj}F@?-+M5hyUxwqcORehN6A?#Kk+C@U|(a~HFyC^kBSE8y-AwL zbchzka_JP>q)>H20m?aL6_viiYgwfo-a8}goqak3H=-#ec&hNktqSitjXA;y`4Ikh zz>I>{)L4$>;(Z2CV-$El(keTC{3+gD|Lt;alrwTyd;6fv6VD?9VWw4o5;IAt1 E3tuMK1ONa4 literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07e6e47 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules diff --git a/Android/.DS_Store b/Android/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1927dde1f2a3de097e345601719d67aa97f8d5b4 GIT binary patch literal 6148 zcmeHK!EVz)5S>lZ#v!VdLlGQT;u=8$ZPkj4lLjQN7{LLm5R-^lb-hvIkV6#7*YZRB z3BLnxb~lJB$q}SfGt%rE@6NN=Z>?Pq5vlHc*d}TaQ2=Kw)zEA)9%tXMlJ6-4mA%J^ zGRi5T*Ko0YP=MF&0d;7ObsN)P>-Q!#U*gon80U|p1AqF<8loMXcrlxJ&X0JKCbPWN z`l(9g%E4hZs0Q`mDjJ(bln?UxtUH)~!*>K*<@gp&v(#i?F}~)mIf9~qC?E>#odSL%3+j6}bD6LxAPW3z z1$ckZaK_MM;m~d!Xlw}ptf1Q(V*XuZj`kROEF5A4rW_UMsLGcZ%F)rUeO~CXaOmiy zeDR_Dla;SflzlqxuWdT1(4n-VfGBWR0j~XE4L<*0?XLfAk~E@#C~!X&P?cWP>*C$~ z*}CzTeAa6CXE+<@6%PMU5ZI#_xqK8qhFe3w<^ULaEF7W-CO-mJ25Cfr|Ej=mZd+QQ literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/.gitignore b/Android/AuthentiFi/.gitignore new file mode 100644 index 0000000..fd45b12 --- /dev/null +++ b/Android/AuthentiFi/.gitignore @@ -0,0 +1,11 @@ +*.iml +.gradle +/local.properties +/.idea/caches/build_file_checksums.ser +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/Android/AuthentiFi/.idea/assetWizardSettings.xml b/Android/AuthentiFi/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..fee22e2 --- /dev/null +++ b/Android/AuthentiFi/.idea/assetWizardSettings.xml @@ -0,0 +1,163 @@ + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/codeStyles/Project.xml b/Android/AuthentiFi/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/Android/AuthentiFi/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/compiler.xml b/Android/AuthentiFi/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/Android/AuthentiFi/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/deploymentTargetDropDown.xml b/Android/AuthentiFi/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..03ea122 --- /dev/null +++ b/Android/AuthentiFi/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/dictionaries/pratz.xml b/Android/AuthentiFi/.idea/dictionaries/pratz.xml new file mode 100644 index 0000000..89dbd49 --- /dev/null +++ b/Android/AuthentiFi/.idea/dictionaries/pratz.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/gradle.xml b/Android/AuthentiFi/.idea/gradle.xml new file mode 100644 index 0000000..a0de2a1 --- /dev/null +++ b/Android/AuthentiFi/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/jarRepositories.xml b/Android/AuthentiFi/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/Android/AuthentiFi/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/misc.xml b/Android/AuthentiFi/.idea/misc.xml new file mode 100644 index 0000000..774fed6 --- /dev/null +++ b/Android/AuthentiFi/.idea/misc.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/.idea/vcs.xml b/Android/AuthentiFi/.idea/vcs.xml new file mode 100644 index 0000000..fdf1fc8 --- /dev/null +++ b/Android/AuthentiFi/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/.gitignore b/Android/AuthentiFi/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/Android/AuthentiFi/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Android/AuthentiFi/app/build.gradle b/Android/AuthentiFi/app/build.gradle new file mode 100644 index 0000000..efded8d --- /dev/null +++ b/Android/AuthentiFi/app/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.pratz.authentifi" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "0.9" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support:support-v4:28.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + + implementation 'com.android.volley:volley:1.1.0+' + implementation 'com.journeyapps:zxing-android-embedded:3.0.2@aar' + implementation 'com.google.zxing:core:3.3.3' +} diff --git a/Android/AuthentiFi/app/proguard-rules.pro b/Android/AuthentiFi/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/Android/AuthentiFi/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Android/AuthentiFi/app/src/androidTest/java/com/pratz/authentifi/ExampleInstrumentedTest.java b/Android/AuthentiFi/app/src/androidTest/java/com/pratz/authentifi/ExampleInstrumentedTest.java new file mode 100644 index 0000000..63e565f --- /dev/null +++ b/Android/AuthentiFi/app/src/androidTest/java/com/pratz/authentifi/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.pratz.authentifi; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.pratz.scanner", appContext.getPackageName()); + } +} diff --git a/Android/AuthentiFi/app/src/main/AndroidManifest.xml b/Android/AuthentiFi/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c32f9e7 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/AndroidManifest.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/ic_launcher-web.png b/Android/AuthentiFi/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..988b94aac934d68b2802464f95b487a0193c72b2 GIT binary patch literal 16322 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 uS)<#*SiW=@o`WSBru_fOchCE!$owDRQY)zgY}P { + private String[] mDataset; + + private List mAssetList; + + @Override + public int getItemCount() { + return mAssetList.size(); + } + + // Provide a reference to the views for each data item + // Complex data items may need more than one view per item, and + // you provide access to all the views for a data item in a view holder + public static class MyViewHolder extends RecyclerView.ViewHolder { + // each data item is just a string in this case + public TextView mCode, mName; + + public MyViewHolder(ConstraintLayout v) { + super(v); + mCode = (TextView) v.findViewById(R.id.asset_code); + mName = (TextView) v.findViewById(R.id.asset_name); + } + } + + // Provide a suitable constructor (depends on the kind of dataset) + public AssetAdapter(List myDataset) { + mAssetList = myDataset; + } + + // Create new views (invoked by the layout manager) + @Override + public AssetAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, + int viewType) { + // create a new view + ConstraintLayout v = (ConstraintLayout) LayoutInflater.from(parent.getContext()) + .inflate(R.layout.asset_item, parent, false); + + MyViewHolder vh = new MyViewHolder(v); + return vh; + } + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(MyViewHolder holder, final int position) { + // - get element from your dataset at this position + // - replace the contents of the view with that element + holder.mCode.setText(mAssetList.get(position).productCode); + holder.mName.setText(mAssetList.get(position).productModel); + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(v.getContext(), ProductPage.class); + Bundle bundle = new Bundle(); + bundle.putString("code", mAssetList.get(position).productCode); + bundle.putBoolean("isOwner", true); + intent.putExtras(bundle); + v.getContext().startActivity(intent); + } + + + //Crap I added: + + }); + } + + // Return the size of your dataset (invoked by the layout manager) + + + + + //Everything I added: + +} \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/AssetsFragment.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/AssetsFragment.java new file mode 100644 index 0000000..4a66d25 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Assets/AssetsFragment.java @@ -0,0 +1,207 @@ +package com.pratz.authentifi.Assets; + +import android.app.ActivityOptions; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.constraint.ConstraintLayout; +import android.support.v4.app.Fragment; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.ProductPage; +import com.pratz.authentifi.R; +import com.pratz.authentifi.SellActivity.BuyActivity; +import com.pratz.authentifi.User.LoginActivity; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import static java.lang.Thread.sleep; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.util.List; +import java.util.ArrayList; + +public class AssetsFragment extends Fragment { + + View view; + List assetList = new ArrayList(); + RecyclerView.Adapter mAdapter; + + RecyclerView mRecyclerView; + ProgressBar progressBar; + Button buyItem; + + String textAddress; + + public AssetsFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if(view==null) + Log.d("yolo hi", "view is null create"); + } + + @Override + public void onResume() { + super.onResume(); + Log.i("Yolo", "Resumed!"); + + + progressBar.setVisibility(View.VISIBLE); + mRecyclerView.setVisibility(View.INVISIBLE); + + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + + + String URL = MainActivity.address+"/myAssets"; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("email", MainActivity.email); + } catch (JSONException e) { + e.printStackTrace(); + } + + + String requestBody = jsonObject.toString(); + Log.i("Kaldon-Asset", requestBody); + + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + try { + progressBar.setVisibility(View.INVISIBLE); + mRecyclerView.setVisibility(View.VISIBLE); + JSONArray jsonArray = new JSONArray(result); + jsonArray.remove(0); + JSONObject tempObject; + assetList.clear(); + for(int i=0; i() { + @Override + public void onResponse(String response) { + Log.i("KALDON-response", response); + volleyCallback.onSuccessResponse(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.e("KALDON-error", error.toString()); + volleyCallback.onErrorResponse(error); + } + }) { + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + Log.i("Kaldon-net", Integer.toString(response.statusCode)); + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + + } + + @Override + public String getBodyContentType() { + return "application/json; charset=utf-8"; + } + + @Override + public byte[] getBody() throws AuthFailureError { + try { + return requestBody == null ? null : requestBody.getBytes("utf-8"); + } catch (UnsupportedEncodingException e) { + return null; + } + } + }; + + + stringRequest.setRetryPolicy(new DefaultRetryPolicy( + 10000, + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, + DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); + + requestQueue.add(stringRequest); + } + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MainActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MainActivity.java new file mode 100644 index 0000000..1a3dbc5 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MainActivity.java @@ -0,0 +1,329 @@ +package com.pratz.authentifi; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomNavigationView; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.pratz.authentifi.Assets.AssetsFragment; + +import static android.media.MediaRecorder.VideoSource.CAMERA; + +public class MainActivity extends AppCompatActivity { + + FragmentManager fragmentManager; + public static String email, address; + + TextView title; + ImageButton profileButton, closeButton; + FloatingActionButton scanButton; + + private void askForPermission(String permission, Integer requestCode) { + if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { + + // Should we show an explanation? + if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) { + + //This is called if user has denied the permission before + //In this case I am just asking the permission again + ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); + + } + else { + + ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); + } + } /*else { + Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); + }*/ + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + + askForPermission(Manifest.permission.CAMERA, CAMERA); + + email = getIntent().getExtras().getString("email"); + address = getIntent().getExtras().getString("address"); + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + //setSupportActionBar(toolbar); + + final Integer fragmentContainer = R.id.fragment_container; + fragmentManager = getSupportFragmentManager(); + final Fragment assetsFragment = new AssetsFragment(); + final Fragment profileFragment = new MyProfileFragment(); + fragmentManager.beginTransaction().add(fragmentContainer, assetsFragment).commit(); + + title = (TextView) findViewById(R.id.title_head); + title.setText(R.string.assets_head); + + profileButton = (ImageButton) findViewById(R.id.profile_button); + profileButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + profileButton.setVisibility(View.INVISIBLE); + + fragmentManager.beginTransaction() + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .replace(fragmentContainer, profileFragment) + .commit(); + + title.setText(R.string.profile_head); + closeButton.setVisibility(View.VISIBLE); + } + }); + + closeButton = (ImageButton) findViewById(R.id.close_button); + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + closeButton.setVisibility(View.INVISIBLE); + + fragmentManager.beginTransaction() + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .replace(fragmentContainer, assetsFragment) + .commit(); + + title.setText(R.string.assets_head); + + profileButton.setVisibility(View.VISIBLE); + } + }); + + scanButton = (FloatingActionButton)findViewById(R.id.scan_button); + scanButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Intent intent = new Intent(MainActivity.this, Viewfind.class); + // startActivity(intent); + + Intent intent = new IntentIntegrator(MainActivity.this) + .setPrompt("Scan a product") + .setOrientationLocked(false) + .createScanIntent(); + + intent.putExtra("retailer", "0"); + + startActivityForResult(intent, 0); + + + } + }); + + + + + /*BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation); + bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { + + Fragment fragment = null; + + switch (menuItem.getItemId()) { + case R.id.navigation_assets: + fragment = Assets; + break; + + case R.id.navigation_scan: + openCam(); + return false; + + case R.id.navigation_profile: + fragment = Profile; + break; + + } + + fragmentManager.beginTransaction() + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .replace(fragmentContainer, fragment) + // .show(fragment) + // .hide(fragmentManager.findFragmentById(fragmentContainer)) + .commit(); + return true; + } + });*/ + + //set screen at boot + //fragmentManager.beginTransaction().add(fragmentContainer, Profile).hide(Profile).commit(); + + } + + public void onActivityResult(int requestCode, int resultCode, Intent intent) { + IntentResult scanResult = IntentIntegrator + .parseActivityResult(requestCode, resultCode, intent); + + if (scanResult != null) { + Log.i("QRcode", scanResult.getContents()); + // handle scan result + intent = new Intent(MainActivity.this, ProductPage.class); + Bundle bundle = new Bundle(); + bundle.putString("code", scanResult.getContents()); + + if(false) + bundle.putBoolean("isOwner", true); + else + bundle.putBoolean("isOwner", false); + + intent.putExtras(bundle); + startActivity(intent); + } + // else continue with any other code you need in the method + + } + + + void pushlogs(Fragment fragment) { + + Log.d("yolo added", Boolean.toString(fragment.isAdded())); + Log.d("yolo stsvd", Boolean.toString(fragment.isStateSaved())); + Log.d("yolo detac", Boolean.toString(fragment.isDetached())); + Log.d("yolo hidde", Boolean.toString(fragment.isHidden())); + Log.d("yolo visib", Boolean.toString(fragment.isVisible())); + Log.d("yolo resum", Boolean.toString(fragment.isResumed())); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + + + + +} + + +// Code that I used temporarily until I did it the right way: + +/* +class SwipelessViewPager extends ViewPager { + + private boolean isPagingEnabled; + + public SwipelessViewPager(Context context) { + super(context); + this.isPagingEnabled = true; + } + + public SwipelessViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + this.isPagingEnabled = true; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + return this.isPagingEnabled && super.onTouchEvent(event); + } + + //for samsung phones to prevent tab switching keys to show on keyboard + @Override + public boolean executeKeyEvent(KeyEvent event) { + return isPagingEnabled && super.executeKeyEvent(event); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + return this.isPagingEnabled && super.onInterceptTouchEvent(event); + } + + public void setPagingEnabled(boolean enabled) { + this.isPagingEnabled = enabled; + } +} + + +class BottomNavigationAdapter extends FragmentPagerAdapter { + + private final List fragmentList = new ArrayList<>(); + + BottomNavigationAdapter(FragmentManager manager) { + super(manager); + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + public void addFragment(Fragment fragment){ + fragmentList.add(fragment); + } + +}*/ + + +/** TODO: +Android App: + + Enviroment 1(Customer): + + Login(username, password) + + Signup(email,password,name,photo(*),phone) + + MyAssets(List of assets, when you click on the assets it takes you to ProductPage) + + ProductPage(Brand name, model no,image,desc,status & Manufacturer(location,timestamp) & ++PreviousOwner(name,timestamp)) + (Button for SELL -> which goes to SellActivity with the code) + (Button for Report Stolen -> and response) + + Scanner (Can scan NFC code, once scanned goes to ProductPage + (Brand name, model no,image,desc,status & Manufacturer(location,timestamp)) + + MyProfile(Details, and listview of transaction history) + buyer (Scanner for scanning sellers QR Code -> Scanner for scanning NFC code -> Confirm) + + + Enviroment 2(Retailer): + + Login(username, password) + + Scanner(scans the NFC code, then the same process of second hand) +*/ diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MyProfileFragment.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MyProfileFragment.java new file mode 100644 index 0000000..00bdcb8 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/MyProfileFragment.java @@ -0,0 +1,93 @@ +package com.pratz.authentifi; + +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link MyProfileFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link MyProfileFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class MyProfileFragment extends Fragment { + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + private OnFragmentInteractionListener mListener; + + public MyProfileFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MyProfileFragment. + */ + // TODO: Rename and change types and number of parameters + public static MyProfileFragment newInstance(String param1, String param2) { + MyProfileFragment fragment = new MyProfileFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_myprofile, container, false); + } + + // TODO: Rename method, update argument and hook method into UI event + public void onButtonPressed(Uri uri) { + if (mListener != null) { + mListener.onFragmentInteraction(uri); + } + } + + + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnFragmentInteractionListener { + // TODO: Update argument type and name + void onFragmentInteraction(Uri uri); + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/ProductPage.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/ProductPage.java new file mode 100644 index 0000000..e6ac909 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/ProductPage.java @@ -0,0 +1,244 @@ +package com.pratz.authentifi; + +import android.app.Activity; +import android.content.Intent; +import android.media.Image; +import android.support.constraint.ConstraintLayout; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.RetryPolicy; +import com.android.volley.VolleyError; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.HttpHeaderParser; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.RetailerActivity.MainRetailerActivity; +import com.pratz.authentifi.SellActivity.SellActivity; +import com.pratz.authentifi.User.LoginActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.UnsupportedEncodingException; + +public class ProductPage extends AppCompatActivity { + + TextView productCode, productBrand, productName, productDescription, productManufacturer, productStatus, productStatusDescription; + ImageButton productImage, productStatusImage, productSell, productStolen; + ConstraintLayout productOwnerLayout; + + String prodCode; + + View view; + //int i=3; + //ImageButton testButton, testButton1; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.progressbar_loading); + + view = View.inflate(ProductPage.this, R.layout.activity_product_page, null); + + //Get UI elements + productCode = (TextView) view.findViewById(R.id.product_code); + productBrand = (TextView) view.findViewById(R.id.product_brand); + productName = (TextView) view.findViewById(R.id.product_name); + productDescription = (TextView) view.findViewById(R.id.product_description); + productManufacturer = (TextView) view.findViewById(R.id.product_manufacturer); + productStatus = (TextView) view.findViewById(R.id.product_status); + productStatusDescription = (TextView) view.findViewById(R.id.product_status_description); + productImage = (ImageButton) view.findViewById(R.id.product_image); + productStatusImage = (ImageButton) view.findViewById(R.id.product_status_image); + productOwnerLayout = (ConstraintLayout) view.findViewById(R.id.owner_section); + + productStolen = (ImageButton) view.findViewById(R.id.product_stolen_image); + productSell = (ImageButton) view.findViewById(R.id.product_sell_image); + + + + + + //Read code from previous activity + Bundle bundle = getIntent().getExtras(); + if(bundle.getBoolean("isOwner")) + productOwnerLayout.setVisibility(View.VISIBLE); + + prodCode = bundle.getString("code"); + productCode.setText(prodCode); + + productSell.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(ProductPage.this, SellActivity.class); + intent.putExtra("code", prodCode); + intent.putExtra("retailer", getIntent().getExtras().getString("retailer")); + startActivity(intent); + finish(); + } + }); + + productStolen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + RequestQueue requestQueue = Volley.newRequestQueue(ProductPage.this); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("code", prodCode); + jsonObject.put("email", MainActivity.email); + } catch (JSONException e) { + e.printStackTrace(); + } + + String URL = MainActivity.address+"/stolen"; + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + Toast toast = Toast.makeText(ProductPage.this, + "Product has been reported as stolen.", + Toast.LENGTH_LONG); + + toast.show(); + + finish(); + } + + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + } + }); + + + //Get data from server + try { + getData(); + } catch (JSONException e) { + e.printStackTrace(); + } + + + //close button + ImageButton closeButton = (ImageButton) view.findViewById(R.id.close); + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + + + //set product state accordingly + productValid(); + + //Cycle between outputs (testing purposes only) + + } + + private void productValid() { + productStatusImage.setImageResource(R.drawable.ic_check_circle_black); + productStatus.setText(R.string.product_valid); + productStatusDescription.setText(R.string.product_valid_description); + } + + private void productStolen() { + productStatusImage.setImageResource(R.drawable.ic_error_black); + productStatus.setText(R.string.product_stolen); + productStatusDescription.setText(R.string.product_stolen_description); + } + + private void productInvalid() { + productStatusImage.setImageResource(R.drawable.ic_cancel_black); + productStatus.setText(R.string.product_unregistered); + productStatusDescription.setText(R.string.product_unregistered_description); + } + + private void getData() throws JSONException { + + RequestQueue requestQueue = Volley.newRequestQueue(ProductPage.this); + String address; + if(MainActivity.address==null) + address=MainRetailerActivity.address; + else + address=MainActivity.address; + String URL = address+"/scan"; + final JSONObject jsonBody = new JSONObject(); + jsonBody.put("code", prodCode); + final String requestBody = jsonBody.toString(); + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + try { + JSONObject jsonObject = new JSONObject(result); + + //Set data + + productName.setText(jsonObject.getString("model")); + productBrand.setText(jsonObject.getString("name")); + productDescription.setText(jsonObject.getString("description")); + productManufacturer.setText(getString(R.string.product_manufacturer, + jsonObject.getString("manufacturerName")+", " + +jsonObject.getString("manufacturerLocation"), + jsonObject.getString("manufacturerTimestamp"))); + + switch(Integer.parseInt(jsonObject.getString("status"))) { + case 0: + productInvalid(); + break; + + case 1: + productValid();; + break; + + default: + productStolen(); + } + + setContentView(view); + + } catch (JSONException e) { + e.printStackTrace(); + Log.e("KALDONjs", "sad"); + } + + + } + + @Override + public void onErrorResponse(VolleyError error) { + + Toast toast = Toast.makeText(ProductPage.this, + "Could not connect to server, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + } + }); + } + + +} + +//$2b$10$8LgfFIfInVNDvOQU0KZr0OGtB38ISPAT3pIdvhiTolBCS6zyvapYO \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/MainRetailerActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/MainRetailerActivity.java new file mode 100644 index 0000000..28034cf --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/MainRetailerActivity.java @@ -0,0 +1,105 @@ +package com.pratz.authentifi.RetailerActivity; + +import android.content.pm.PackageManager; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; +import android.widget.TextView; + +import com.google.zxing.integration.android.IntentIntegrator; +import com.pratz.authentifi.Assets.AssetsFragment; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.MyProfileFragment; +import com.pratz.authentifi.R; + +public class MainRetailerActivity extends AppCompatActivity { + + TextView title; + ImageButton profileButton, closeButton; + public static String email, address; + FragmentManager fragmentManager; + + + + private void askForPermission(String permission, Integer requestCode) { + if (ContextCompat.checkSelfPermission(MainRetailerActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { + + // Should we show an explanation? + if (ActivityCompat.shouldShowRequestPermissionRationale(MainRetailerActivity.this, permission)) { + + //This is called if user has denied the permission before + //In this case I am just asking the permission again + ActivityCompat.requestPermissions(MainRetailerActivity.this, new String[]{permission}, requestCode); + + } + else { + + ActivityCompat.requestPermissions(MainRetailerActivity.this, new String[]{permission}, requestCode); + } + } /*else { + Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); + }*/ + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main_retailer); + email = getIntent().getExtras().getString("email"); + address = getIntent().getExtras().getString("address"); + + title = (TextView) findViewById(R.id.title_head); + title.setText(R.string.assets_head); + + + final Integer fragmentContainer = R.id.fragment_container; + fragmentManager = getSupportFragmentManager(); + final Fragment homeFragment = new RetailerHomeFragment(); + final Fragment profileFragment = new MyProfileFragment(); + fragmentManager.beginTransaction().add(fragmentContainer, homeFragment).commit(); + + + profileButton = (ImageButton) findViewById(R.id.profile_button); + profileButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + profileButton.setVisibility(View.INVISIBLE); + + fragmentManager.beginTransaction() + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .replace(fragmentContainer, profileFragment) + .commit(); + + title.setText(R.string.profile_head); + closeButton.setVisibility(View.VISIBLE); + } + }); + + closeButton = (ImageButton) findViewById(R.id.close_button); + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + closeButton.setVisibility(View.INVISIBLE); + + fragmentManager.beginTransaction() + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .replace(fragmentContainer, homeFragment) + .commit(); + + title.setText(R.string.assets_head); + + profileButton.setVisibility(View.VISIBLE); + } + }); + + + + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/RetailerHomeFragment.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/RetailerHomeFragment.java new file mode 100644 index 0000000..089da70 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/RetailerActivity/RetailerHomeFragment.java @@ -0,0 +1,160 @@ +package com.pratz.authentifi.RetailerActivity; + + +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.ProductPage; +import com.pratz.authentifi.R; +import com.pratz.authentifi.SellActivity.SellActivity; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class RetailerHomeFragment extends Fragment { + + + Button claimButton, scanButton, sellButton; + IntentIntegrator intentIntegrator; + + public RetailerHomeFragment() { + // Required empty public constructor + } + + @Override + public void onResume() { + super.onResume(); + intentIntegrator = new IntentIntegrator(getActivity()) + .setOrientationLocked(false); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_retailer_home, container, false); + + claimButton = (Button) view.findViewById(R.id.claim_button); + claimButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = intentIntegrator.setPrompt("Scan a Product") + .createScanIntent(); + startActivityForResult(intent, 0); + } + }); + + scanButton = (Button) view.findViewById(R.id.scan_button); + scanButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Intent intent = new Intent(MainActivity.this, Viewfind.class); + // startActivity(intent); + + Intent intent = intentIntegrator.setPrompt("Scan a Product") + .createScanIntent(); + startActivityForResult(intent, 1); + } + }); + + sellButton = (Button) view.findViewById(R.id.sell_button); + sellButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent intent = intentIntegrator.setPrompt("Scan a Product") + .createScanIntent(); + startActivityForResult(intent, 2); + + } + }); + + return view; + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent intent) { + IntentResult scanResult = IntentIntegrator.parseActivityResult(IntentIntegrator.REQUEST_CODE, resultCode, intent); + switch(requestCode) { + case 0: + retailerClaim(scanResult.getContents()); + break; + + case 1: + retailerScan(scanResult.getContents()); + break; + + default: + retailerSell(scanResult.getContents()); + + + } + } + + private void retailerClaim(String code) { + String URL = MainRetailerActivity.address+"/addRetailerToCode"; + JSONObject jsonObject = new JSONObject(); + + try { + jsonObject.put("code", code); + jsonObject.put("email", MainRetailerActivity.email); + } catch (JSONException e) { + e.printStackTrace(); + } + + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + Toast toast = Toast.makeText(getContext(), + "Product claimed successfully.", + Toast.LENGTH_LONG); + + toast.show(); + } + + @Override + public void onErrorResponse(VolleyError error) { + + Toast toast = Toast.makeText(getContext(), + "Could not connect to server, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + } + }); + + } + + private void retailerScan(String code) { + Intent intent = new Intent(getContext(), ProductPage.class); + intent.putExtra("isOwner", true); + intent.putExtra("code", code); + intent.putExtra("retailer", "1"); + startActivity(intent); + + } + + private void retailerSell(String code) { + Intent intent = new Intent(getContext(), SellActivity.class); + intent.putExtra("retailer", "1"); + intent.putExtra("code", code); + startActivity(intent); + + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyActivity.java new file mode 100644 index 0000000..fca2834 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyActivity.java @@ -0,0 +1,89 @@ +package com.pratz.authentifi.SellActivity; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; + +import com.pratz.authentifi.R; + +public class BuyActivity extends AppCompatActivity { + + Integer fragmentContainer; + FragmentManager fragmentManager; + Button nextButton; + + static String qrcode; + + int i=0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sell); + + fragmentContainer = (R.id.fragment_container); + fragmentManager = getSupportFragmentManager(); + + nextButton = (Button) findViewById(R.id.button_next); + ImageButton closeButton = (ImageButton) findViewById(R.id.close_button); + + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + nextButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nextScreen(); + } + }); + + nextScreen(); + + + + } + + private void nextScreen() { + Fragment fragment=null; + + switch(i) { + case 0: + //instructions + fragment = new SellStep0(); + break; + + case 1: + //nextButton.setVisibility(View.INVISIBLE); + // /buy -> QRCode, email + fragment = new BuyStep1(); + + + break; + + case 2: + //buyerConfirm + fragment = new BuyStep2(); + break; + + default: + fragment = new BuyStep3(); + + //getProductDetails QRCode prodCode + + } + i++; + + fragmentManager.beginTransaction() + .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left) + .replace(fragmentContainer, fragment) + .commit(); + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep1.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep1.java new file mode 100644 index 0000000..7b51b02 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep1.java @@ -0,0 +1,98 @@ +package com.pratz.authentifi.SellActivity; + + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.util.SparseArray; +import android.view.LayoutInflater; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.ProductPage; +import com.pratz.authentifi.R; +import com.pratz.authentifi.Viewfind; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; + +/** + * A simple {@link Fragment} subclass. + */ +public class BuyStep1 extends Fragment { + + TextView textView; + + public BuyStep1() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + + IntentIntegrator.forSupportFragment(this) + .setPrompt("Scan the Seller's QR code") + .setOrientationLocked(false) + .initiateScan(); + + + View view= inflater.inflate(R.layout.fragment_buy_step1, container, false); + + textView = view.findViewById(R.id.nexttocontinue); + + + + return view; + + } + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + + IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + BuyActivity.qrcode=result.getContents(); + if(result != null) { + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("QRCode", result.getContents()); + jsonObject.put("email", MainActivity.email); + } catch (JSONException e) { + e.printStackTrace(); + } + + String URL = MainActivity.address+"/buy"; + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + textView.setVisibility(View.VISIBLE); + } + + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + } + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep2.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep2.java new file mode 100644 index 0000000..de8fda6 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep2.java @@ -0,0 +1,97 @@ +package com.pratz.authentifi.SellActivity; + + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.util.SparseArray; +import android.view.LayoutInflater; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.ProductPage; +import com.pratz.authentifi.R; +import com.pratz.authentifi.Viewfind; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; + +/** + * A simple {@link Fragment} subclass. + */ +public class BuyStep2 extends Fragment { + + TextView textView; + + public BuyStep2() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + + IntentIntegrator.forSupportFragment(this) + .setPrompt("Scan the Product's QR code") + .setOrientationLocked(false) + .initiateScan(); + + + View view= inflater.inflate(R.layout.fragment_buy_step1, container, false); + + textView = view.findViewById(R.id.nexttocontinue); + + + + return view; + + } + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + + IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + if(result != null) { + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("code", result.getContents()); + jsonObject.put("QRCode", BuyActivity.qrcode); + } catch (JSONException e) { + e.printStackTrace(); + } + + String URL = MainActivity.address+"/getProductDetails"; + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + textView.setVisibility(View.VISIBLE); + } + + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + } + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep3.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep3.java new file mode 100644 index 0000000..df80d9c --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/BuyStep3.java @@ -0,0 +1,78 @@ +package com.pratz.authentifi.SellActivity; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.R; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * A simple {@link Fragment} subclass. + */ +public class BuyStep3 extends Fragment { + + + public BuyStep3() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + + View view = inflater.inflate(R.layout.fragment_sell_step2, container, false); + + ImageButton confirm = (ImageButton) view.findViewById(R.id.confirm); + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + String URL = MainActivity.address+"/buyerConfirm"; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("email", MainActivity.email); + jsonObject.put("QRCode", BuyActivity.qrcode); + } catch (JSONException e) { + e.printStackTrace(); + } + + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + } + + @Override + public void onErrorResponse(VolleyError error) { + Toast toast = Toast.makeText(getContext(), + "Could not confirm transaction, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + } + }); + getActivity().finish(); + } + }); + + return view; + } + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellActivity.java new file mode 100644 index 0000000..5597995 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellActivity.java @@ -0,0 +1,81 @@ +package com.pratz.authentifi.SellActivity; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; + + +import com.pratz.authentifi.R; + +public class SellActivity extends AppCompatActivity { + + int i=0; + + static String qrcode; + Integer fragmentContainer; + FragmentManager fragmentManager; + Button nextButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sell); + + fragmentContainer = (R.id.fragment_container); + fragmentManager = getSupportFragmentManager(); + + nextScreen(); + + nextButton = (Button) findViewById(R.id.button_next); + nextButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nextScreen(); + } + }); + + ImageButton closeButton = (ImageButton) findViewById(R.id.close_button); + + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + + } + + private void nextScreen() { + + Fragment fragment; + + switch(i) { + case 0: + fragment = new SellStep0(); + break; + + case 1: + fragment = new SellStep1(); + break; + + default: + nextButton.setVisibility(View.INVISIBLE); + Bundle bundle = new Bundle(); + bundle.putString("retailer", getIntent().getExtras().getString("retailer")); + fragment = new SellStep2(); + fragment.setArguments(bundle); + } + + i++; + + fragmentManager.beginTransaction() + .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left) + .replace(fragmentContainer, fragment) + .commit(); + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep0.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep0.java new file mode 100644 index 0000000..97fb8e6 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep0.java @@ -0,0 +1,36 @@ +package com.pratz.authentifi.SellActivity; + +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.pratz.authentifi.R; + +public class SellStep0 extends Fragment { + + public SellStep0() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = (View) inflater.inflate(R.layout.fragment_sell_step0, container, false); + + + return view; + + } + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep1.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep1.java new file mode 100644 index 0000000..bc6689e --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep1.java @@ -0,0 +1,104 @@ +package com.pratz.authentifi.SellActivity; + +import android.content.Context; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.journeyapps.barcodescanner.BarcodeEncoder; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.R; +import com.pratz.authentifi.RetailerActivity.MainRetailerActivity; +import com.pratz.authentifi.User.LoginActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +public class SellStep1 extends Fragment { + + ImageView qrview; + + public SellStep1() { + // Required empty public constructor + } + + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_sell_step1, container, false); + + qrview = view.findViewById(R.id.qrview); + String address,email; + if(MainActivity.address==null) { + email = MainRetailerActivity.email; + address = MainRetailerActivity.address; + } + else { + address = MainActivity.address; + email = MainActivity.email; + } +// Log.i("Kaldon-ss1", MainRetailerActivity.email); + String URL = address+"/sell"; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("code", getActivity().getIntent().getExtras().getString("code")); + jsonObject.put("email", email); + } catch (JSONException e) { + e.printStackTrace(); + } + String requestBody = jsonObject.toString(); + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + Log.i("Kaldon-res", result); + SellActivity.qrcode = result; + MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); + try { + BitMatrix bitMatrix = multiFormatWriter.encode(result, BarcodeFormat.QR_CODE,200,200); + BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); + Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix); + qrview.setImageBitmap(bitmap); + } catch (WriterException e) { + e.printStackTrace(); + } + } + + @Override + public void onErrorResponse(VolleyError error) { + Toast toast = Toast.makeText(getContext(), + "Could not get QRcode, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + + } + }); + return view; + } +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep2.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep2.java new file mode 100644 index 0000000..2480eff --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/SellActivity/SellStep2.java @@ -0,0 +1,88 @@ +package com.pratz.authentifi.SellActivity; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.R; +import com.pratz.authentifi.RetailerActivity.MainRetailerActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * A simple {@link Fragment} subclass. + */ +public class SellStep2 extends Fragment { + + + public SellStep2() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + + View view = inflater.inflate(R.layout.fragment_sell_step2, container, false); + + final String address,email; + if(MainActivity.address==null) { + email = MainRetailerActivity.email; + address = MainRetailerActivity.address; + } + else { + address = MainActivity.address; + email = MainActivity.email; + } + ImageButton confirm = (ImageButton) view.findViewById(R.id.confirm); + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + String URL = address+"/sellerConfirm"; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("email", email); + jsonObject.put("QRCode", SellActivity.qrcode); + jsonObject.put("retailer", getArguments().getString("retailer")); + } catch (JSONException e) { + e.printStackTrace(); + } + + RequestQueue requestQueue = Volley.newRequestQueue(getContext()); + + ConnectionManager.sendData(jsonObject.toString(), requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + } + + @Override + public void onErrorResponse(VolleyError error) { + Toast toast = Toast.makeText(getContext(), + "Could not confirm transaction, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + } + }); + getActivity().finish(); + } + }); + + return view; + } + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginActivity.java new file mode 100644 index 0000000..6cb09d0 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginActivity.java @@ -0,0 +1,179 @@ +package com.pratz.authentifi.User; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.Assets.Asset; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.R; + +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStreamWriter; + +public class LoginActivity extends AppCompatActivity { + + String filename = "logincredentials.aut"; + static String textAddress; + User user; + + EditText email, password, address; + Button submit; + TextView signup, retailer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + setContentView(R.layout.activity_login); + + email = (EditText) findViewById(R.id.editEmail); + password = (EditText) findViewById(R.id.editPass); + address = (EditText) findViewById(R.id.editAddress); + submit = (Button) findViewById(R.id.submitbutton); + signup = (TextView) findViewById(R.id.signupbutton); + retailer = (TextView) findViewById(R.id.retailerbutton); + + email.setHint("Email"); + password.setHint("Password"); + address.setHint("Server Address"); + + try { + FileInputStream fileInputStream = openFileInput(filename); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); + email.setText(bufferedReader.readLine()); + password.setText(bufferedReader.readLine()); + address.setText(bufferedReader.readLine()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + + + submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + /* + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + startActivity(intent); + finish(); + */ + + submit.setEnabled(false); + Log.d("John", address.getText().toString()); + final String textEmail = email.getText().toString(); + final String textPass = password.getText().toString(); + textAddress = address.getText().toString(); + + RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this); + String URL = textAddress+"/login"; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("email", textEmail); + jsonObject.put("password", textPass); + } + catch (Exception e) + { + e.printStackTrace(); + } + final String requestBody = jsonObject.toString(); + + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + Log.i("KALDONi", result); + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + intent.putExtra("email", textEmail); + intent.putExtra("address", textAddress); + startActivity(intent); + + + try { + user = new User(textEmail, textPass); + FileOutputStream fileOutputStream = openFileOutput(filename, Context.MODE_PRIVATE); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); + outputStreamWriter.write(user.getEmail()); + outputStreamWriter.append("\n"); + outputStreamWriter.append(user.getPassword()); + outputStreamWriter.append("\n"); + outputStreamWriter.append(address.getText()); + outputStreamWriter.flush(); + outputStreamWriter.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + + + finish(); + } + + @Override + public void onErrorResponse(VolleyError error) { + Toast toast = Toast.makeText(LoginActivity.this, + "Could not login, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + + submit.setEnabled(true); + } + }); + } + + }); + + signup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + textAddress=address.getText().toString(); + Intent intent = new Intent(LoginActivity.this, SignupActivity.class); + startActivity(intent); + + } + }); + + retailer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(LoginActivity.this, LoginRetailerActivity.class); + startActivity(intent); + finish(); + } + }); + + + } + + void loginSuccessful() { + Log.d("John", "Logged in!"); + Intent intent = new Intent(getApplicationContext(), MainActivity.class); + startActivity(intent); + finish(); + } + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginRetailerActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginRetailerActivity.java new file mode 100644 index 0000000..50de000 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/LoginRetailerActivity.java @@ -0,0 +1,182 @@ +package com.pratz.authentifi.User; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.MainActivity; +import com.pratz.authentifi.RetailerActivity.MainRetailerActivity; +import com.pratz.authentifi.R; + +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +public class LoginRetailerActivity extends AppCompatActivity { + + String filename = "logincredentials.aut"; + static String textAddress; + User user; + + EditText email, password, address; + Button submit; + TextView signup, retailer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + setContentView(R.layout.activity_login); + + email = (EditText) findViewById(R.id.editEmail); + password = (EditText) findViewById(R.id.editPass); + address = (EditText) findViewById(R.id.editAddress); + submit = (Button) findViewById(R.id.submitbutton); + signup = (TextView) findViewById(R.id.signupbutton); + retailer = (TextView) findViewById(R.id.retailerbutton); + + signup.setVisibility(View.INVISIBLE); + + email.setHint("Email"); + password.setHint("Password"); + address.setHint("Server Address"); + + retailer.setText(R.string.userlogin); + + try { + FileInputStream fileInputStream = openFileInput(filename); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); + email.setText(bufferedReader.readLine()); + password.setText(bufferedReader.readLine()); + address.setText(bufferedReader.readLine()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + + + submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + /* + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + startActivity(intent); + finish(); + */ + + submit.setEnabled(false); + Log.d("John", address.getText().toString()); + final String textEmail = email.getText().toString(); + final String textPass = password.getText().toString(); + textAddress = address.getText().toString(); + + RequestQueue requestQueue = Volley.newRequestQueue(LoginRetailerActivity.this); + String URL = textAddress+"/retailerLogin"; + Log.i("Kaldon-urllogin", URL); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("email", textEmail); + jsonObject.put("password", textPass); + } + catch (Exception e) + { + e.printStackTrace(); + } + final String requestBody = jsonObject.toString(); + + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + Log.i("KALDONi", result); + Intent intent = new Intent(LoginRetailerActivity.this, MainRetailerActivity.class); + intent.putExtra("email", textEmail); + intent.putExtra("address", textAddress); + startActivity(intent); + + + try { + user = new User(textEmail, textPass); + FileOutputStream fileOutputStream = openFileOutput(filename, Context.MODE_PRIVATE); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); + outputStreamWriter.write(user.getEmail()); + outputStreamWriter.append("\n"); + outputStreamWriter.append(user.getPassword()); + outputStreamWriter.append("\n"); + outputStreamWriter.append(address.getText()); + outputStreamWriter.flush(); + outputStreamWriter.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + + + finish(); + } + + @Override + public void onErrorResponse(VolleyError error) { + Toast toast = Toast.makeText(LoginRetailerActivity.this, + "Could not login, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + + submit.setEnabled(true); + } + }); + } + + }); + + signup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(LoginRetailerActivity.this, SignupActivity.class); + startActivity(intent); + + } + }); + + retailer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(LoginRetailerActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + + + }); + } + + void loginSuccessful() { + Log.d("John", "Logged in!"); + Intent intent = new Intent(getApplicationContext(), MainRetailerActivity.class); + startActivity(intent); + finish(); + } + +} + diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/SignupActivity.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/SignupActivity.java new file mode 100644 index 0000000..c286ee2 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/SignupActivity.java @@ -0,0 +1,142 @@ +package com.pratz.authentifi.User; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.util.Patterns; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.Volley; +import com.pratz.authentifi.ConnectionManager; +import com.pratz.authentifi.R; + +import org.json.JSONException; +import org.json.JSONObject; + + +public class SignupActivity extends AppCompatActivity { + + EditText name; + EditText email; + EditText phone; + EditText pass; + EditText passconfirm; + EditText address; + Button submit; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_signup); + + name = (EditText) findViewById(R.id.editName); + email = (EditText) findViewById(R.id.editEmail); + phone = (EditText) findViewById(R.id.editPhone); + pass = (EditText) findViewById(R.id.editPass); + passconfirm = (EditText) findViewById(R.id.editPassConfirm); + address = (EditText) findViewById(R.id.editAddress); + submit = (Button) findViewById(R.id.submitbutton); + + name.setHint("Name"); + email.setHint("E-Mail Address"); + phone.setHint("Phone Number"); + pass.setHint("Password"); + passconfirm.setHint("Confirm Password"); + address.setHint("Server Address"); + + address.setText(LoginActivity.textAddress); + Log.i("kaldon-pass", LoginActivity.textAddress); + + submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + submit.setEnabled(false); + + try { + signupValidator(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }); + + + + } + + void signupValidator() throws JSONException { + String textEmail = email.getText().toString(); + String textName = name.getText().toString(); + String textPhone = phone.getText().toString(); + String textPass = pass.getText().toString(); + String textPassC = passconfirm.getText().toString(); + String textAddress = address.getText().toString(); + + int flag=0; + + if(TextUtils.isEmpty(textEmail) || !Patterns.EMAIL_ADDRESS.matcher(textEmail).matches()) { + + email.setError("Enter a valid E-mail address!"); + flag = 1; + } + + if (TextUtils.isEmpty(textPass) || textPass.length()<8){ + flag=1; + pass.setError("Password should be minimum 8 characters"); + } + else if(!textPass.equals(textPassC)) + { + pass.getText().clear(); + passconfirm.getText().clear(); + passconfirm.setError("Passwords do not match!"); + flag=1; + } + + if(textPhone.length()!=10) { + flag=1; + phone.setError("Enter a valid phone number (10 digits)"); + } + + + if(flag==0) + { + RequestQueue requestQueue = Volley.newRequestQueue(SignupActivity.this); + String URL = textAddress+"/signup"; + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name", textName); + jsonObject.put("email", textEmail); + jsonObject.put("password", textPass); + jsonObject.put("phone", textPhone); + final String requestBody = jsonObject.toString(); + Log.i("KALDONreq", requestBody); + + ConnectionManager.sendData(requestBody, requestQueue, URL, new ConnectionManager.VolleyCallback() { + @Override + public void onSuccessResponse(String result) { + finish(); + } + + @Override + public void onErrorResponse(VolleyError error) { + + Toast toast = Toast.makeText(SignupActivity.this, + "Could not connect to server, please try again.", + Toast.LENGTH_LONG); + + toast.show(); + + submit.setEnabled(true); + } + }); + } + } + + +} diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/User.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/User.java new file mode 100644 index 0000000..0b9bb05 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/User/User.java @@ -0,0 +1,21 @@ +package com.pratz.authentifi.User; + +public class User { + String name, phone, email; + String password; + + public User(String email, String password) { + this.email = email; + this.password = password; + } + + public String getEmail() { + return email; + } + + public String getPassword() { + return password; + } +} + +// getCustomerDetails email -> name, phone diff --git a/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Viewfind.java b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Viewfind.java new file mode 100644 index 0000000..92f34e9 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/java/com/pratz/authentifi/Viewfind.java @@ -0,0 +1,122 @@ +package com.pratz.authentifi; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Camera; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraManager; +import android.support.v4.app.ActivityCompat; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.util.SparseArray; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.widget.ImageButton; + +import java.io.IOException; +import java.lang.reflect.Array; + +public class Viewfind extends AppCompatActivity { + + SurfaceView viewfind; + ImageButton closeButton, flashButton; + CameraManager cameraManager; + + @Override + protected void onResume() { + super.onResume(); + overridePendingTransition(R.anim.slide_in_down, R.anim.stay_in_position); + } + + @Override + protected void onPause() { + super.onPause(); + overridePendingTransition(0, R.anim.slide_out_down); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + + setContentView(R.layout.activity_viewfind); + + viewfind = (SurfaceView) findViewById(R.id.viewfinder); + closeButton = (ImageButton) findViewById(R.id.close); + + closeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + //createCameraSource(); + + } + + /* + private void createCameraSource() { + + final BarcodeDetector barcodeDetector = new BarcodeDetector + .Builder(getApplicationContext()) + // .setBarcodeFormats() + .build(); + final CameraSource cameraSource = new CameraSource.Builder(this, barcodeDetector) + .setAutoFocusEnabled(true) + .setRequestedFps(15.0f) + .setRequestedPreviewSize(1024, 1024) + .build(); + + viewfind.getHolder().addCallback(new SurfaceHolder.Callback() { + @Override + public void surfaceCreated(SurfaceHolder holder) { + if (ActivityCompat.checkSelfPermission(Viewfind.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + try { + cameraSource.start(viewfind.getHolder()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + cameraSource.stop(); + } + }); + + barcodeDetector.setProcessor(new Detector.Processor() { + @Override + public void release() { + + } + + @Override + public void receiveDetections(Detector.Detections detections) { + + final SparseArray barcodes = detections.getDetectedItems(); + String code = barcodes.valueAt(0).displayValue; + + + } + }); + }*/ +} diff --git a/Android/AuthentiFi/app/src/main/res/anim/slide_in_down.xml b/Android/AuthentiFi/app/src/main/res/anim/slide_in_down.xml new file mode 100644 index 0000000..a1cd069 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/anim/slide_in_down.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/anim/slide_in_right.xml b/Android/AuthentiFi/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..63641fe --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/anim/slide_out_down.xml b/Android/AuthentiFi/app/src/main/res/anim/slide_out_down.xml new file mode 100644 index 0000000..bf79607 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/anim/slide_out_down.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/anim/slide_out_left.xml b/Android/AuthentiFi/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..749a354 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/anim/stay_in_position.xml b/Android/AuthentiFi/app/src/main/res/anim/stay_in_position.xml new file mode 100644 index 0000000..5f96813 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/anim/stay_in_position.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_cameraflash.png b/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_cameraflash.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c9faab26f17a6b671e48293392688534b5924e GIT binary patch literal 365 zcmV-z0h0cSP)lFrvqTNbJwQkKz%bB4KTw*%|k1|%Oc%$NbBnmt_{Ln>~)o#xHeV8G)deUba? z=JSkSR2HSbF#NJ@8TUcg=}vAl*&B7_-%e0rapF*XFOWRPTeExXqqj=FYR_x76-{5Y zl}~NcJtuxm`yj8$doQIgVR1Y4t2xLvq|{{NTIHv+HCM~3y$Em$h-VYc%8`njxgN@xNAVh}~7 literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_fingerprint.png b/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_fingerprint.png new file mode 100644 index 0000000000000000000000000000000000000000..849f26804f6aa7f951d5b50984914b526a6b62aa GIT binary patch literal 1175 zcmV;I1Zew-P)K0qq?zY?AYBja3MF@`)+#;bY(OBCQANZgqT6Lvr)M61W zQ2$%c$DB(hn-ca5+y2BinS392?%Z?d&YYQVTig9>^RM=5wff-b=;%W{Z~5W_0|Wa? zrP9RU;NXXP{$8>oxn@}@7K=aX{*h!7-Aw`6-QB%S3yrauWL*p0l>91L(EC}*Nj*;q zj_n43FA~D0x1>)aE z(b(VU2*7x`Tz#HZDeHRiI!v) z9`TOU5X*I6e656jTUK7s|s$euI?=jeN%0Q%HRW)06@9;Ie!&y@;o;#O8+f)udIgPNu#FWmFwjWF8=Ybb<@sqo& zEF(T#EEmIW510^t*S&a~7@zUx@l1;Kwv)g0_*8c>yawEYuy@igZBXWRaR2m zW$%oqREBdLONki2_3@2CeA3-3Ic#qFEGC7&b=cMv@0r>W+5~o-+68#UY2TH(3S zu$d9Y1nw0B>T-}5{oe2K{aKEyU?ck+C*x#@j$o(9YXoib0wqK`!=dC*yQX|>J533P z0yn{PeVGAiH&5FmhcKGlY$jh0URi>F!u(%|rNBAo=mf0WV?fQPzjkr3;fUTOrcw)` zvG<6d)QC|qsbc|9P2+#Xf*iojF*j2TIXiAqd)gKE7(?_y5irML{Z3dLPnpp>*<9)# zT(FzJ*g1t%22MA`!O_4;RP__iy6r9-UnUZzVdJl)p_9B8yN9ei^oir7-CnrF0wItu zm?%4<*J#MXg6((>PfK3is5{64=ne0xGrp(nAZ_innZWKRO$Qg#aklIteYNOdIs(Yh z|6)I+S`+|`HSo|?vv-}ip{I6daJ1DRDVpnwp%bAOn)iR#u>@Wn=c90!kNq;7Mbi(H zxBORHhCgt}R|*MGv!@o#?pybdPrt3j7pX^D{Kdd8Ly|wz@3WbCYk-kia?niUFA-qj pB&xaOw=9kPreBTy_5G_=*MCVc)bwl%!iWF>002ovPDHLkV1lmoP`LmA literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_myassets.png b/Android/AuthentiFi/app/src/main/res/drawable-hdpi/ic_myassets.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad4e698369dcb5771aaf7d3898e01643f16e19e GIT binary patch literal 530 zcmV+t0`2{YP)THVVdSrY(R!#3}Ji#>c=0t zuJ0v4zF3wuBLX38RV<|=1%csJfLy~H-yDXGJFMAJfTdxm8UXQUK=)WGRIymx5)3}W zQ%4BXI(dXL4)Ye*!Q7DoIuUx+zDw&&z)CNgl+PEK+D_V2(wGH`*C9bw%E=>yBMj`4m8-2?Wq)J2m d-@2Bik#EbGQqx+pFVX-2002ovPDHLkV1nQw)r}1CrEe*NJ*XY;ZZwX zz|PJtmYn?9)4^sc!@1>0nljbY)QmqS8XFs%&WdE1qOWHCr*mUN&UN8rM%Q)f$C$ce z{7*1-#R3UuXJ_3BHawRPv0t80pr$+dWk_*xap9^bDKgVof|u$91qLR%f9IWWpSOgC zJ(SBf=U{3=LW1koAkn)_3cHy!&UgrO_w@9nF&NKO3VqF*!rf3}b5&bz2CIXO;0&Fg w8JUgJzN`EuupZd3UVV3j!X+l(HbG8?*Gtx2zgw|l3eYzUp00i_>zopr0QPTImH+?% literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_chevon_right.png b/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_chevon_right.png new file mode 100644 index 0000000000000000000000000000000000000000..784337ab1386be7f8dd36f62a43645cae901f99b GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjKAtX)Ar-fh6C_v{H|QNWapJ`B zD_5>eS8J1&lJb(2mi9L{G@R+_?d|g-_2ia??}Zl}TxPPhWtrFola36jlUvFx-x^E# gc6S9DaB(m(sOsqy&K5SA4m6j+)78&qol`;+09iLHE&u=k literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_fingerprint.png b/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_fingerprint.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e624e1e4c22ff8dfb00a632228b6d50cc33984 GIT binary patch literal 718 zcmV;<0x|uGP)RsKuqB5u@2BlSr^ZToBu$k<<#JEhwnqjzU#5MlG7ws`U^1KJbo+ z*epe%1BZL(?EB2n&{}$0t=2l=pD8RBiwVJ{LZR?j@LBg|oj*#YQb+Iv8ax9l&gF8u zB=}J9Nzlw@v*}u`wp;g&^?H2+ba2qj^9Xw122!cic6nGvSu&a2oX_Wv2SIRF-d_Ps(Pb?5jL{hPQgZ0Ejka+&8_?4wNQ}D4}r)Euu_k9K1Z; zA}{v>cn&U;$!s&vqKr=TY=CC7xn9h-1y2b%olb9(f-{QZm2ls6|Df|d#TLvdb*D)Y zyvT@t2OTRK5W|#&9#BkqbX1Bz>V8*e3Plkgcj{u^cZ%d7GBk#8)7|oZqgt(QMIm9A z%jIm;uEI@X%myc;yz30%mEuE|o$jZDIubhOdeAi;I!I?8@Eu$O9&qBHr%pYKOq%Et z?h?F8w@^%SOWG=x%3+j(g9eY~W@wI{9YnYus)VOEPL5rVIpJP9?|Yz`C!x7GKon9F zThRbQbc#J1Ck4L0W$=Eh)tKI2nAQ+XpqR9EooE&Hh?pb6SwV%G$g?jfpe?05=SY{` zZ2`P4_-nlmck7~IdfxfJDS;Y=V+QQu#VF^bOK{T0;y5BhOVp-YikQqLd;3cn`Pch? zT9Fho2a0x7iWdZz1?L5AWcpdrZ6eV*B6x!_=lPoH_uT6-)&?sAN0^;{zX9y{&?#xL zHN6TJXj9TbfmzXB**ht0Uo-IM;{j^3+{m{FaKtNmOi?|@FnE03I1O7%lLkQY5)KL07*qoM6N<$f-YuG Aw*UYD literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_myassets.png b/Android/AuthentiFi/app/src/main/res/drawable-mdpi/ic_myassets.png new file mode 100644 index 0000000000000000000000000000000000000000..7e02743c12a023f6f734d31184fafff345024161 GIT binary patch literal 352 zcmV-m0iXVfP)U3eOiWB>0_mxtp`pw}#{zwQeQlt@*+xc2Ge8zV=_H^W!QlaMT$2o%?&YOnzfWd#~;2*eFAOMsZ4>hS}N3vQsn z6QJ>9OKv`hfd)qs4&O9FE%2bEhyVq{bdW1S!2=5>pye*Gd;m-cnv{fjD3+pPDohNN yqbW|dAfEsY%|b5hfc$)*FHEVHCx&)?FbV)4vU!|}D$=z80000<0S|&pq{=Z^4{W#ZlNpa3V`xl4TGCU0$&4 zF{O<@=qrg$nEP?YV6$bgX`20#^X6q7Fo(H?Ib?~zSOP1F5R0>K`nEyJrV5x-ssX>2 n(xft&Ti76NQV0Kka%Fh{mY$zX*q&vy00000NkvXXu0mjfcv+e& literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/Android/AuthentiFi/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_cameraflash.png b/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_cameraflash.png new file mode 100644 index 0000000000000000000000000000000000000000..a5426a0eec2aaf1c5777af78f9d109048fe5ce1f GIT binary patch literal 419 zcmV;U0bKrxP)bf!_Ew5 zV8|t#?C;yjWM+)%tv4QvqUeaqvn(5W-Fy%P$9U-*d_m!9n%;Q_z)P2To^L3;EXzx^ z062k1@9|FsfM=|64b=ib{Rcd5pb~&heJTJp^{D{7XC6ubmdry1z#97$0Iad^3Lrv# z7XT6Jy8y6e9#;VN%;O4x`zP(XF4qu3t9DI?-)b(WKdP!4X>Mqyn)`uQoWO}%fFwz- z*|JbqQ@=;-KQ&ErAZn}N_e7F}zlYIl28Ey6jKyJNb10cHIv1oK&>bgEu3m{_l*;{Y_$hIVCT73O0`Hlbp N002ovPDHLkV1jTiwm1L) literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_chevon_right.png b/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_chevon_right.png new file mode 100644 index 0000000000000000000000000000000000000000..45d8b223e30e0c77de76b03b75e520220eabbe0f GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtd7dtgAr-gY&e+Y{Vj$qM)9=BH z1NJ+ag)(?K7DksbFA?4~A?1N>rfR$Ky^q^7ff^Vd@YyN07(Tc88R56Ld;6^*uibMv zh3)1%+FPTOy6D=iSs$L7d`NaV?xMNW_~7TOEg|Z6j%*b^(rF>6{?X!QPyPRy6JELW zY}_7|`dB5`!OH1UcSM!+RJ#)$yc;VYPj&p~sri3J{gLe;M>i<2^DSKTU;F=`S0IZ$ MUHx3vIVCg!05&>U0RR91 literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_fingerprint.png b/Android/AuthentiFi/app/src/main/res/drawable-xhdpi/ic_fingerprint.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb316e87f8805e04bc12e238df90dce123ccb70 GIT binary patch literal 1607 zcmV-N2Dtf&P)WeL zp3|J0oZjx%un!g!zU1cn`1tPJnYm}q%-pT3+r4(Loq0`9Pe0Pp(NWLA=bfx;BArgZ z*52OU4P}Q?snjIyGx+-^o^RuM1@}eVXE83~{ctjw{D5;fw`N+mw6wemWxj+`*D(Hp zlABu@oWr@4(bm@X%C>pCtE=lBEPBqB#`6;1oyGVJe;=WDF`gxSdV6~xYiw+Mh6Y2? z!+6(+F~&J=jAS0F>aJk1UM#esMb~g2>F(}+pNei(7Uys-j5-aOcPNvxJ3Bj%SIqzj z@5I74u+RW-{QQ3@$Xy6K@vv_x3*#%w#z@zKZT7)~p9&g`iS+`QUx(q>;e)e;5j_8T zP1%XKh7zBPaW-OQ$v|WxW23wN4d;-V@O+ZHv~7xG(LJO>#XwN_Z;Vk<>06mh<|zg* zJYU*N4biv=(7O~WwoX?sU&Yil#9wOBAy7G)Z=M!9B1l;_q%XfA9ucOmu=SwulR zrOf+4;*w%3QnZ&bRAh(OwASy0Yq{BWFN9o@z*&0M|4*;te`lhk#^*V(&6MDAo+Sjv zLX@%dQ26_vo}L$6rgm>uMqh4jZhpEX<%fob9)+-^{ zB~AwAiQxi;UWO&II0) z=I~OvK^beFX99(@*(pnTDDzO0? zJ%hTeo`FFZXw$JDsL}(C*);UW3gr6&m<63`sSQwct95w?1H}eqwFY~M4JVCK;L{}o z&RBkUDP(B#WI~B;lZrls&5mkrE~4l~zISCI?`Ij-QdSc$PY*lQ#Y*7a%ON{QUL5e) zAtc$r6Za7zrQ0$|42U!2e+rLJo0N>3-rAJgE zpIG=udM|=jUnn!IgJOJK2sG=A!~_@`7M+t$kfzlG?4wc4;yk|J7Q@ucEGUB>^VZT7 z%{mRT%%&p>9sXK3cc&^)DiYxB;_JLK5}ytCInTPm5ak1&DP7XfPcuAA5{qryPfyI4 zKLqx1+!GSk$u0AAqLd#(s(z_J3u*s~H~ji>BWpA{PY=f(T+J`y-cHg^#JfbO(YOfj z-|i?QbduH|pLIqDUQBi)YF38p{;!uZb)s(f+P!Lj{R>ry4-bA($L#T(|-#2sSobQa!r%jtSZ9QY5P-r+7i+v;#i66Vi8?vk1JL*l;{Ki?oeS8)It>{m8rEO^Omf>=1FUN z6(-rC^g$=Z8I49)NYptHsVaNOS?P_{UZT#76HaNLSBx?d+dp83%3iv8AsKST?7+S2 zEhHxlgfj}p?z3&Cs{~T1)D#;A$nC45JAknlY@w4OBdSbFd=p8Dyfc7#$F2u5R?*}D zY0}jRrA~XLwK7lu#g4R5iw!^gt)!I02(U$`rk;wFt*LJ~-CW?^i8NVZ^|*W8Ua8o? zpToyg=nWP{FSaayrbDlqpriaA1c_~jtHm~a7a7c;o?6)|rEjM-f&WfGn>KCQy0%}= Wkh=)?^33u80000a<2ZA~Op(rJvzxhGt_D053WYaNL-GE}TSd+=)v!zhAWFy!%b_2w2^E0cZQfVbfmv#QtV%yk* z7bLnq1KMNkR&AdF-B^P;zyNDR6H6-tX5NKVL5%l{pde+{MzGXt`Wogl}iz zCdVLrDct8pxKLl5)(&t5oFJ7hWHOnhI5}J5>Ub#pd+>)H$Pb4`i`baTDp~1tdIz(5 z9fI^wb@{>b1}Af7Vurv?*2g6doew;ppnosise|{=ag5;@94qRCZ5tiGkGQDcLgxsu z#Z4^eLbHmrA`Sghl<$Im0B|gh8C9~j!9Y|D(gF72ziVMu6+{n!XGQ;gjvYmw(@@OL zZj`4f`vTcL#VR*K|5=kREWOD6^LL!}{1={3fA&(T)Pe{|&w$nxa;lbpGav_JfIqM} zz=YACm;uvd literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_cameraflash.png b/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_cameraflash.png new file mode 100644 index 0000000000000000000000000000000000000000..b1436052220dc5b73265b0a97e4a60603c94609c GIT binary patch literal 616 zcmV-u0+;=XP)%)AMJN~Kb%oKho-qRlW2w>X2=6hWuc>1<;>w%hGFXW*JQ^yU0}K%VFA z;G2EvcDp}Zfq=g8wkaZm>Hvi6P2)ITQ9$W%zQkltO@O8%yr&L8qP(Z344R1X9&SLC zJ-E)PxGIqgkT~z*1SB?l7&Azo_b>x$f>c!vDDfUpK!&PWtoJZwkX-Mn8j#4UnK^?d zBI_OwKvsB9#ek+(WKR`f_l z7a;2HaeH}SyGmrxomFQ;O9u3gKkEnJf(in<1Xq+75I*-QIqy+GY2o|+8MvgJfM%o7 zXjK6j`YnuOa7{S?jlo4_0VKWOsvMB@{Z>gpF+RSofDFf|PV`$v0pb0(VB0ixS%C1q zkHKKD53b7uNYs3b8xZwdqUKxNfW*zWI04ao%ZY=qB7n%4o$R-A02(V1GoXdD{Z1N~F=u6XfweN~PAJBTiOMQ}b;XLuSC%>M~EFUbb^WElRK>~*S#%+J&)#Z zFO+%jeC6S^B^CQbbXUIr-9BN48{`yCQh7ONNwdn+>`5xRzCj=F>UwfX z=FfcVcByBUOVBzsNj2WdoBLGz6(41=L};x1p%NPURYd5XYNtZ9&%|rbc)R+f_*Sp8 zKBaR)?~K@$IY!Yty??i^y(6GuX)h;VQ+4ja^H$4AfBt>yR=FAWQ)MDE#3K*pf8^Ac VNR~34k+K&g;_2$=vd$@?2>@C!jFbQX literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_fingerprint.png b/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_fingerprint.png new file mode 100644 index 0000000000000000000000000000000000000000..f044bd94655943e7dcd256624e757d17d8bade2b GIT binary patch literal 2556 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 literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_myprofile.png b/Android/AuthentiFi/app/src/main/res/drawable-xxhdpi/ic_myprofile.png new file mode 100644 index 0000000000000000000000000000000000000000..dca4f03eaee4313314939c66b12ff7b0ba4fd91a GIT binary patch literal 953 zcmV;q14jIbP)VqiQ3KbthA_Nk1&qFL*ygjHONbsdZ6bkJ_M69MNURI^?R&6Vl=)d** zaFkMJXE)c)PR<91UAnU~=X`tS%sDfu;|K%-fj}S-2m}Iw-6$4|hbh9uUnDA(%IQ+6 zV&kzfHn6Y^#W}-)mrW9c#X-M*oT$ml*{EyFtFP%IeSRzvM(EB&i4T0zrgr43hzyA*_Tx@2}U&y9`O{$ zruM}au5c+nGZ59Z#(VtY4&q7El=tu%+xW#JE4&DXEc#57XRhlW3VNSy*w%-nMH>ie zX~_Adrd3!kOz|BJL9JMm<9Xfz7~*LR>-17ms1l^3@gk37#Fn6BGI>}p)BC}yrF2rYkS-3TcBEkI} zL&-o-y117p-t%vKW~j%OrlweBd;uXJ{}rpe*To!bi&fd~2v5@0K{w3UhhsCiZ3;uT z`ygjqZMoWydcA&11@7Gtf$gerCo09DiHJ^$w&8nagA{M;wa|4-+6{9)?|q ztissOrVKgca=!_Agnn+|dOmjB9aI<|at;REg1j9@_H4?kaovF2<%gJbvJ$ymE(4{X zjFJ=+Sv>uK6dR4k!HM!1D3yhRF9w}H!w^;YzM)Q$dsI4|KBKIkwIj`n_FY&^|^*$88T&vYCa7hmuC!5V4NBbnkTfp^!TJd`MARE+m z+{^VGSEP_%vCW^XRIAmq!-x&sOk=8m{;xq^h9Qf(Qs=Rd!#o6oy$YH(YGs)n)5p3O z^y?Aota7N)0^YD-P+|w9+=e12qKJnoq5R>eA9Wwc{&L%goOMp4s8?0$KwbP!Qbszs z+DzZn9R!96xZ{GV=Q_HnALbV&eS<5CZa0u+#01uTtGZoD+7JanD-%f2iVzeRf>fTd zGD)J#(;_1%E+Pa8K|)Zx3Bmv~kWU;arb69kM!IXr0r(Z-D2klv`rk8wKp+qZ1OkCT bFp2mB))CJw(6xJr00000NkvXXu0mjfhY7s8 literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_cameraflash.png b/Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_cameraflash.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb444f0a31ea9cab27733eaf560edcfa8f8be8a GIT binary patch literal 732 zcmV<20wev2P)q3HpI}HUFrCL$^{I{Ng{sE)% z9`1QwI2#kqc%GR%@0^)QmLY@?LI@#LdX43IK3A<)=RHPhTWVuzvtOxHKDFEJVXM{p z>ok6p8bGJh`E38>l|gv+7S^sui?vcef1Cq2>h*e)0MG#_ckg!&U=YFrc?4kXxoe4GP_)B7C)7-Z4p1wbh0<8%bXaX#JvgmXR)0mO1X4gtjM z{Z0T3vdB^b2|I%lS7<&NF?Udc-dA`IW zNE9}5c9;Wn$^T>RngxI+`A^oSOZDOorKa96L_S6K(>oX=jUMVm7K*Qq_M zghdmt#Wtk~9e{J2c&Ebw7~!i5E>my)fSt1MQR{K9`mzp7)MBdbyfc8G{eFLf(x~8( zmG%nE_b-rH5da%ayJS@d;NpM1ABg~LkWmo;`y0m=Q)E;CAlXivcvr}#2!Ktz2V_zN zAT8#KqWDTCbpW==q6mQf-dVTXogs??0I7adtJSJxPzT^JEA#mt&j9TGH>E${;~7AR z^F59MT!hQ7n@QoyIas%?Kfc5JCvOw_X5ASusp=5TDZk O0000VAS_?aSW-r_4bZ$)}a8AhQPOL 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 Hu0mjf8gk7A literal 0 HcmV?d00001 diff --git a/Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_myassets.png b/Android/AuthentiFi/app/src/main/res/drawable-xxxhdpi/ic_myassets.png new file mode 100644 index 0000000000000000000000000000000000000000..42bfbceff405bbd6120d19c102e9be92bb4bf79b GIT binary patch literal 1261 zcmVgrlmC=^bDv{4e6g!p+z#7A7uXS3PWVtH=V zyD;;{7wPkiim`k?e?W9s0F&i%5L3oe`a4bXD@2$ic_DH~d(-myY2MIk%o?Nu|Xai`EF>-FB-NEN4xDGP^k29LMwg@s^ z#gn(&n%9$1v=Myg9NG?iuW_!>!T;mp3#sQmC(3uD2+x9>4?tv}k(^1UrJSha_R-nd zxd-1Lwg`+h$KH?@Sz9b&g1LLO#4zt?>S^e!H<(cXLe3bU%AAk>aG!&?=d{7PSQo_P z%b05jJuer!Pqf29csyuBh7oYYXTQ9kL4ckR1ZZR$85MpofgbYNFXn=s2GJjcBEUqH z0Jvs+_M6Y=H=y6Ch_LrMln^v*2nQv(Wa+JdpBuu#V9-8I%8Rh8mPHs=w8!LFrW1zt zTg@_vaH?D`FBNP4!_Ygc`9|A<9*{< z`-sitbHR4{_tk8upp9cx+`zvJ^m3Fr#RNl2oPw)}_Khhn_j`-Q;%2dH9|^mxlXA>G z-$5?uLUB2(LU(ufMv!&SXDv`=nIet0Y&N@9nN&o23bHz)%(^Os;1*~Pi@!v5M25s_ z1?~f@+Qi(k@+k&J!%tih(}3E*5``0Oo`HqeCQEf3=K>xQ5o0Nteo@tNu3ZybDS$RL z*ANB)o{FvXM!``-7#gZ+67VDMMy*cW{%;z6XDsK7YyBy_Xb1zvH2OAHV@%hy0JNKp zwfc+FH?8oR7J%omqOuWpD#mvhs;8@JsmQBo0a#?k+JDQrEuSu>H4R0-*K0l-!H+y{ zv}S?KnO;WOF)UjzqOv0 z3Ph%Rj%8g(&bf>gwRHh zOZ_8>o|KssAkrOzkLjiYe3~G~ae9NAAk;w<6u=4FOuh`0GCJWPvtW^y0OqHKvta|W z+3Zn+0zTH%)NJ-zFRsD0Zgrz=rXqf)4Wr)?6E@pcw2n(;dQ$_MO~6a8)%D+FOxhI`BcR9;7>u4dx=0(Q`3QBZA(Gj zWZ3RWNDFCwAu6DcYrsD8M7lL`GQg;x)H>FZQUAH3w62287S=~jQuHY`|aDX*l zA@$h8?djNjtMYeyI?DK2Lna7bc{i>TyK7KNkY&!Y0Zax`1ISG3;`onZC*qcD_8o+>WukT{G4GJUZi~&{ zBV=FD-4L@YMY_vu`8$>_MHyG+cwf1$l3_-BL^}FRJ3Jpn!M*7uFIN_d&`2dG@+zvN zyJb(sJe`PZ9x0X2=MT%xzg|h(UJPG>KAOOt>;-37yBmdu( zzYk&FaZ&I7|vQoUq(X59bV#im<>34gq)7!Aj*1T z`>6xNAn1+kx&n3?Ahh$@v1vFzx&AC75#4?g<|F^>V;`c7gQApkx`;pHbASv+Zbt>; zXz9>9A0xeAlZpMj0{`edN5QJOoX)aKiE059a-hKY!XV@t_Xv0r`4jE4c# z6^Z*tuEoaTO6R_6Dqu%MBMO+QonoeL3Ax{F95eb}^1H?i(q=CXMp;~9X!r`7Jxb_% z6e6Di!%cR^aaO6}bf@8|9w@o<)vr@6cZ2 + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_cancel_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_cancel_black.xml new file mode 100644 index 0000000..5fc6832 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_cancel_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_check_circle_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_check_circle_black.xml new file mode 100644 index 0000000..2916038 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_check_circle_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_chevron_right_white.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_chevron_right_white.xml new file mode 100644 index 0000000..fa5211f --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_chevron_right_white.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_close_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_close_black.xml new file mode 100644 index 0000000..019af13 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_close_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_close_white.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_close_white.xml new file mode 100644 index 0000000..7bd6c0e --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_close_white.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_devices_other_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_devices_other_black.xml new file mode 100644 index 0000000..1fd80dd --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_devices_other_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_error_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_error_black.xml new file mode 100644 index 0000000..bfa5e02 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_error_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_launcher_background.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_monetization_on_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_monetization_on_black.xml new file mode 100644 index 0000000..eb3a196 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_monetization_on_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_report_problem_black.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_report_problem_black.xml new file mode 100644 index 0000000..c543953 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_report_problem_black.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/ic_viewproduct.xml b/Android/AuthentiFi/app/src/main/res/drawable/ic_viewproduct.xml new file mode 100644 index 0000000..3296b0a --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/ic_viewproduct.xml @@ -0,0 +1,5 @@ + + + diff --git a/Android/AuthentiFi/app/src/main/res/drawable/navbar_colour.xml b/Android/AuthentiFi/app/src/main/res/drawable/navbar_colour.xml new file mode 100644 index 0000000..ce7f86f --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/drawable/navbar_colour.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/layout/activity_buy.xml b/Android/AuthentiFi/app/src/main/res/layout/activity_buy.xml new file mode 100644 index 0000000..51fa490 --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/layout/activity_buy.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Android/AuthentiFi/app/src/main/res/layout/activity_login.xml b/Android/AuthentiFi/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..2ad86bf --- /dev/null +++ b/Android/AuthentiFi/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + +

+
+
+
+
Generated QR Code
+
+
+
+
+
+
+
+

Andrew Smith

+

Model: Senior Developer

+

Description: Semantics

+

Manufacturer Name: Data Visualization

+

Manufacturer Location: Data Visualization

+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/views/Pics/logo.png b/views/Pics/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..988b94aac934d68b2802464f95b487a0193c72b2 GIT binary patch literal 16322 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 uS)<#*SiW=@o`WSBru_fOchCE!$owDRQY)zgY}P + + + + + + + + + +
+
+ + + + + diff --git a/views/backup/createCodes.html b/views/backup/createCodes.html new file mode 100644 index 0000000..b57165f --- /dev/null +++ b/views/backup/createCodes.html @@ -0,0 +1,60 @@ + + + + + + + +
+

AuthentiFi

+

Generate QR Codes

+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + diff --git a/views/backup/createRetailer.html b/views/backup/createRetailer.html new file mode 100644 index 0000000..34ce151 --- /dev/null +++ b/views/backup/createRetailer.html @@ -0,0 +1,44 @@ + + + + + + + +
+

AuthentiFi

+

Create Retailer

+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + diff --git a/views/backup/index.html b/views/backup/index.html new file mode 100644 index 0000000..ac8ea82 --- /dev/null +++ b/views/backup/index.html @@ -0,0 +1,60 @@ + + + + + + + +
+

AuthentiFi

+

Generate QR Codes

+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + diff --git a/views/backup/main.css b/views/backup/main.css new file mode 100644 index 0000000..e92e097 --- /dev/null +++ b/views/backup/main.css @@ -0,0 +1,63 @@ +* { + box-sizing: border-box; +} + +input[type=text], select, textarea { + width: 100%; + padding: 12px; + border: 1px solid #ccc; + border-radius: 4px; + resize: vertical; +} + +label { + padding: 12px 12px 12px 0; + display: inline-block; +} + +input[type=submit] { + background-color: #4CAF50; + color: white; + padding: 12px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + float: right; +} + +input[type=submit]:hover { + background-color: #45a049; +} + +.container { + border-radius: 5px; + background-color: #f2f2f2; + padding: 20px; +} + +.col-25 { + float: left; + width: 25%; + margin-top: 6px; +} + +.col-75 { + float: left; + width: 75%; + margin-top: 6px; +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} + +/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */ +@media screen and (max-width: 600px) { + .col-25, .col-75, input[type=submit] { + width: 100%; + margin-top: 0; + } +} diff --git a/views/createCodes.html b/views/createCodes.html new file mode 100644 index 0000000..0524f4d --- /dev/null +++ b/views/createCodes.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + AuthentiFi + + + + +
+
+
+
+
+
Generate QR Codes
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+
+ + +
+ + + + + + diff --git a/views/createRetailer.html b/views/createRetailer.html new file mode 100644 index 0000000..02c5cf3 --- /dev/null +++ b/views/createRetailer.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + AuthentiFi + + + + +
+
+
+
+
+
Retailer Registration
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+
+ + +
+ + + + + + diff --git a/views/davidshimjs-qrcodejs-04f46c6/.gitignore b/views/davidshimjs-qrcodejs-04f46c6/.gitignore new file mode 100644 index 0000000..f4bd643 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/.gitignore @@ -0,0 +1,4 @@ +.DS_Store + +.idea +.project diff --git a/views/davidshimjs-qrcodejs-04f46c6/LICENSE b/views/davidshimjs-qrcodejs-04f46c6/LICENSE new file mode 100644 index 0000000..93c3323 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/LICENSE @@ -0,0 +1,14 @@ +The MIT License (MIT) +--------------------- +Copyright (c) 2012 davidshimjs + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/views/davidshimjs-qrcodejs-04f46c6/README.md b/views/davidshimjs-qrcodejs-04f46c6/README.md new file mode 100644 index 0000000..5e2d2dc --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/README.md @@ -0,0 +1,46 @@ +# QRCode.js +QRCode.js is javascript library for making QRCode. QRCode.js supports Cross-browser with HTML5 Canvas and table tag in DOM. +QRCode.js has no dependencies. + +## Basic Usages +``` +
+ +``` + +or with some options + +``` +
+ +``` + +and you can use some methods + +``` +qrcode.clear(); // clear the code. +qrcode.makeCode("http://naver.com"); // make another code. +``` + +## Browser Compatibility +IE6~10, Chrome, Firefox, Safari, Opera, Mobile Safari, Android, Windows Mobile, ETC. + +## License +MIT License + +## Contact +twitter @davidshimjs + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/davidshimjs/qrcodejs/trend.png)](https://bitdeli.com/free "Bitdeli Badge") + diff --git a/views/davidshimjs-qrcodejs-04f46c6/bower.json b/views/davidshimjs-qrcodejs-04f46c6/bower.json new file mode 100644 index 0000000..0509be6 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/bower.json @@ -0,0 +1,18 @@ +{ + "name": "qrcode.js", + "version": "0.0.1", + "homepage": "https://github.com/davidshimjs/qrcodejs", + "authors": [ + "Sangmin Shim", "Sangmin Shim (http://jaguarjs.com)" + ], + "description": "Cross-browser QRCode generator for javascript", + "main": "qrcode.js", + "ignore": [ + "bower_components", + "node_modules", + "index.html", + "index.svg", + "jquery.min.js", + "qrcode.min.js" + ] +} diff --git a/views/davidshimjs-qrcodejs-04f46c6/code.txt b/views/davidshimjs-qrcodejs-04f46c6/code.txt new file mode 100644 index 0000000..d3011d3 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/code.txt @@ -0,0 +1,6 @@ +53216f2ae0ec809df2ad37634d3fd886 +Apple +Iphone 13 +Description Description Description Description Description Description Description. +Navin3d +UK \ No newline at end of file diff --git a/views/davidshimjs-qrcodejs-04f46c6/codeResult.html b/views/davidshimjs-qrcodejs-04f46c6/codeResult.html new file mode 100644 index 0000000..bea4e18 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/codeResult.html @@ -0,0 +1,21 @@ + + + + + + + + + + +
+
+ + + + + diff --git a/views/davidshimjs-qrcodejs-04f46c6/index-svg.html b/views/davidshimjs-qrcodejs-04f46c6/index-svg.html new file mode 100644 index 0000000..025a135 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/index-svg.html @@ -0,0 +1,47 @@ + + + + Cross-Browser QRCode generator for Javascript + + + + + + + + + + + + + diff --git a/views/davidshimjs-qrcodejs-04f46c6/index.html b/views/davidshimjs-qrcodejs-04f46c6/index.html new file mode 100644 index 0000000..0e289f9 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/index.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + AuthentiFi + + + + + + + + + + +
+
+
+
+
Generated QR Code
+
+
+
+
+
+
+
+

+

+

+

+

+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + diff --git a/views/davidshimjs-qrcodejs-04f46c6/index.svg b/views/davidshimjs-qrcodejs-04f46c6/index.svg new file mode 100644 index 0000000..fabe56a --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/index.svg @@ -0,0 +1,37 @@ + + + + + +
+ +
+ + + +
+
diff --git a/views/davidshimjs-qrcodejs-04f46c6/jquery.min.js b/views/davidshimjs-qrcodejs-04f46c6/jquery.min.js new file mode 100644 index 0000000..2740cc4 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.ajQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/views/davidshimjs-qrcodejs-04f46c6/old.html b/views/davidshimjs-qrcodejs-04f46c6/old.html new file mode 100644 index 0000000..bab0182 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/old.html @@ -0,0 +1,35 @@ + + + +Code Results + + + + +
+ + + diff --git a/views/davidshimjs-qrcodejs-04f46c6/qrcode.js b/views/davidshimjs-qrcodejs-04f46c6/qrcode.js new file mode 100644 index 0000000..5507c15 --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/qrcode.js @@ -0,0 +1,614 @@ +/** + * @fileoverview + * - Using the 'QRCode for Javascript library' + * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. + * - this library has no dependencies. + * + * @author davidshimjs + * @see http://www.d-project.com/ + * @see http://jeromeetienne.github.com/jquery-qrcode/ + */ +var QRCode; + +(function () { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + this.parsedData = []; + + // Added to support UTF-8 Characters + for (var i = 0, l = this.data.length; i < l; i++) { + var byteArray = []; + var code = this.data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + this.parsedData.push(byteArray); + } + + this.parsedData = Array.prototype.concat.apply([], this.parsedData); + + if (this.parsedData.length != this.data.length) { + this.parsedData.unshift(191); + this.parsedData.unshift(187); + this.parsedData.unshift(239); + } + } + + QR8bitByte.prototype = { + getLength: function (buffer) { + return this.parsedData.length; + }, + write: function (buffer) { + for (var i = 0, l = this.parsedData.length; i < l; i++) { + buffer.put(this.parsedData[i], 8); + } + } + }; + + function QRCodeModel(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = []; + } + + QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);} + return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);} + if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);} + this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} + return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;} + for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}} + for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}} + this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);} + var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;} + this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}} + row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error("code length overflow. (" + +buffer.getLengthInBits() + +">" + +totalDataCount*8 + +")");} + if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} + while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} + while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD1,8);} + return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}} + var totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));} + return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));} + return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;} + return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}} + for(var row=0;row=256){n-=255;} + return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);} + if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));} + this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]]; + + function _isSupportCanvas() { + return typeof CanvasRenderingContext2D != "undefined"; + } + + // android 2.x doesn't support Data-URI spec + function _getAndroid() { + var android = false; + var sAgent = navigator.userAgent; + + if (/android/i.test(sAgent)) { // android + android = true; + var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i); + + if (aMat && aMat[1]) { + android = parseFloat(aMat[1]); + } + } + + return android; + } + + var svgDrawer = (function() { + + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + + this.clear(); + + function makeSVG(tag, attrs) { + var el = document.createElementNS('http://www.w3.org/2000/svg', tag); + for (var k in attrs) + if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]); + return el; + } + + var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight}); + svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + _el.appendChild(svg); + + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"})); + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"})); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + if (oQRCode.isDark(row, col)) { + var child = makeSVG("use", {"x": String(col), "y": String(row)}); + child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template") + svg.appendChild(child); + } + } + } + }; + Drawing.prototype.clear = function () { + while (this._el.hasChildNodes()) + this._el.removeChild(this._el.lastChild); + }; + return Drawing; + })(); + + var useSVG = document.documentElement.tagName.toLowerCase() === "svg"; + + // Drawing in DOM by using Table tag + var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () { + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + var aHTML = ['
']; + + for (var row = 0; row < nCount; row++) { + aHTML.push(''); + + for (var col = 0; col < nCount; col++) { + aHTML.push(''); + } + + aHTML.push(''); + } + + aHTML.push('
'); + _el.innerHTML = aHTML.join(''); + + // Fix the margin values as real size. + var elTable = _el.childNodes[0]; + var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2; + var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2; + + if (nLeftMarginTable > 0 && nTopMarginTable > 0) { + elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px"; + } + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._el.innerHTML = ''; + }; + + return Drawing; + })() : (function () { // Drawing in Canvas + function _onMakeImage() { + this._elImage.src = this._elCanvas.toDataURL("image/png"); + this._elImage.style.display = "block"; + this._elCanvas.style.display = "none"; + } + + // Android 2.1 bug workaround + // http://code.google.com/p/android/issues/detail?id=5141 + if (this._android && this._android <= 2.1) { + var factor = 1 / window.devicePixelRatio; + var drawImage = CanvasRenderingContext2D.prototype.drawImage; + CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) { + if (("nodeName" in image) && /img/i.test(image.nodeName)) { + for (var i = arguments.length - 1; i >= 1; i--) { + arguments[i] = arguments[i] * factor; + } + } else if (typeof dw == "undefined") { + arguments[1] *= factor; + arguments[2] *= factor; + arguments[3] *= factor; + arguments[4] *= factor; + } + + drawImage.apply(this, arguments); + }; + } + + /** + * Check whether the user's browser supports Data URI or not + * + * @private + * @param {Function} fSuccess Occurs if it supports Data URI + * @param {Function} fFail Occurs if it doesn't support Data URI + */ + function _safeSetDataURI(fSuccess, fFail) { + var self = this; + self._fFail = fFail; + self._fSuccess = fSuccess; + + // Check it just once + if (self._bSupportDataURI === null) { + var el = document.createElement("img"); + var fOnError = function() { + self._bSupportDataURI = false; + + if (self._fFail) { + self._fFail.call(self); + } + }; + var fOnSuccess = function() { + self._bSupportDataURI = true; + + if (self._fSuccess) { + self._fSuccess.call(self); + } + }; + + el.onabort = fOnError; + el.onerror = fOnError; + el.onload = fOnSuccess; + el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data. + return; + } else if (self._bSupportDataURI === true && self._fSuccess) { + self._fSuccess.call(self); + } else if (self._bSupportDataURI === false && self._fFail) { + self._fFail.call(self); + } + }; + + /** + * Drawing QRCode by using canvas + * + * @constructor + * @param {HTMLElement} el + * @param {Object} htOption QRCode Options + */ + var Drawing = function (el, htOption) { + this._bIsPainted = false; + this._android = _getAndroid(); + + this._htOption = htOption; + this._elCanvas = document.createElement("canvas"); + this._elCanvas.width = htOption.width; + this._elCanvas.height = htOption.height; + el.appendChild(this._elCanvas); + this._el = el; + this._oContext = this._elCanvas.getContext("2d"); + this._bIsPainted = false; + this._elImage = document.createElement("img"); + this._elImage.alt = "Scan me!"; + this._elImage.style.display = "none"; + this._el.appendChild(this._elImage); + this._bSupportDataURI = null; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _elImage = this._elImage; + var _oContext = this._oContext; + var _htOption = this._htOption; + + var nCount = oQRCode.getModuleCount(); + var nWidth = _htOption.width / nCount; + var nHeight = _htOption.height / nCount; + var nRoundedWidth = Math.round(nWidth); + var nRoundedHeight = Math.round(nHeight); + + _elImage.style.display = "none"; + this.clear(); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + var bIsDark = oQRCode.isDark(row, col); + var nLeft = col * nWidth; + var nTop = row * nHeight; + _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.lineWidth = 1; + _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.fillRect(nLeft, nTop, nWidth, nHeight); + + // 안티 앨리어싱 방지 처리 + _oContext.strokeRect( + Math.floor(nLeft) + 0.5, + Math.floor(nTop) + 0.5, + nRoundedWidth, + nRoundedHeight + ); + + _oContext.strokeRect( + Math.ceil(nLeft) - 0.5, + Math.ceil(nTop) - 0.5, + nRoundedWidth, + nRoundedHeight + ); + } + } + + this._bIsPainted = true; + }; + + /** + * Make the image from Canvas if the browser supports Data URI. + */ + Drawing.prototype.makeImage = function () { + if (this._bIsPainted) { + _safeSetDataURI.call(this, _onMakeImage); + } + }; + + /** + * Return whether the QRCode is painted or not + * + * @return {Boolean} + */ + Drawing.prototype.isPainted = function () { + return this._bIsPainted; + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height); + this._bIsPainted = false; + }; + + /** + * @private + * @param {Number} nNumber + */ + Drawing.prototype.round = function (nNumber) { + if (!nNumber) { + return nNumber; + } + + return Math.floor(nNumber * 1000) / 1000; + }; + + return Drawing; + })(); + + /** + * Get the type by string length + * + * @private + * @param {String} sText + * @param {Number} nCorrectLevel + * @return {Number} type + */ + function _getTypeNumber(sText, nCorrectLevel) { + var nType = 1; + var length = _getUTF8Length(sText); + + for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { + var nLimit = 0; + + switch (nCorrectLevel) { + case QRErrorCorrectLevel.L : + nLimit = QRCodeLimitLength[i][0]; + break; + case QRErrorCorrectLevel.M : + nLimit = QRCodeLimitLength[i][1]; + break; + case QRErrorCorrectLevel.Q : + nLimit = QRCodeLimitLength[i][2]; + break; + case QRErrorCorrectLevel.H : + nLimit = QRCodeLimitLength[i][3]; + break; + } + + if (length <= nLimit) { + break; + } else { + nType++; + } + } + + if (nType > QRCodeLimitLength.length) { + throw new Error("Too long data"); + } + + return nType; + } + + function _getUTF8Length(sText) { + var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); + return replacedText.length + (replacedText.length != sText ? 3 : 0); + } + + /** + * @class QRCode + * @constructor + * @example + * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); + * + * @example + * var oQRCode = new QRCode("test", { + * text : "http://naver.com", + * width : 128, + * height : 128 + * }); + * + * oQRCode.clear(); // Clear the QRCode. + * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. + * + * @param {HTMLElement|String} el target element or 'id' attribute of element. + * @param {Object|String} vOption + * @param {String} vOption.text QRCode link data + * @param {Number} [vOption.width=256] + * @param {Number} [vOption.height=256] + * @param {String} [vOption.colorDark="#000000"] + * @param {String} [vOption.colorLight="#ffffff"] + * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] + */ + QRCode = function (el, vOption) { + this._htOption = { + width : 256, + height : 256, + typeNumber : 4, + colorDark : "#000000", + colorLight : "#ffffff", + correctLevel : QRErrorCorrectLevel.H + }; + + if (typeof vOption === 'string') { + vOption = { + text : vOption + }; + } + + // Overwrites options + if (vOption) { + for (var i in vOption) { + this._htOption[i] = vOption[i]; + } + } + + if (typeof el == "string") { + el = document.getElementById(el); + } + + if (this._htOption.useSVG) { + Drawing = svgDrawer; + } + + this._android = _getAndroid(); + this._el = el; + this._oQRCode = null; + this._oDrawing = new Drawing(this._el, this._htOption); + + if (this._htOption.text) { + this.makeCode(this._htOption.text); + } + }; + + /** + * Make the QRCode + * + * @param {String} sText link data + */ + QRCode.prototype.makeCode = function (sText) { + this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); + this._oQRCode.addData(sText); + this._oQRCode.make(); + this._el.title = sText; + this._oDrawing.draw(this._oQRCode); + this.makeImage(); + }; + + /** + * Make the Image from Canvas element + * - It occurs automatically + * - Android below 3 doesn't support Data-URI spec. + * + * @private + */ + QRCode.prototype.makeImage = function () { + if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) { + this._oDrawing.makeImage(); + } + }; + + /** + * Clear the QRCode + */ + QRCode.prototype.clear = function () { + this._oDrawing.clear(); + }; + + /** + * @name QRCode.CorrectLevel + */ + QRCode.CorrectLevel = QRErrorCorrectLevel; +})(); diff --git a/views/davidshimjs-qrcodejs-04f46c6/qrcode.min.js b/views/davidshimjs-qrcodejs-04f46c6/qrcode.min.js new file mode 100644 index 0000000..993e88f --- /dev/null +++ b/views/davidshimjs-qrcodejs-04f46c6/qrcode.min.js @@ -0,0 +1 @@ +var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/views/index.html b/views/index.html new file mode 100644 index 0000000..f7e2498 --- /dev/null +++ b/views/index.html @@ -0,0 +1,201 @@ + + + + + + + + +
+
+ +
+
Retailer
+
Registration
+
+ + REGISTER + +
+
+ +
+
+ +
+
Generate
+
QR Code
+
+ + GENERATE + +
+
+ +
+
+ +
+
diff --git a/views/main.css b/views/main.css new file mode 100644 index 0000000..7e7245c --- /dev/null +++ b/views/main.css @@ -0,0 +1,72 @@ +* { + box-sizing: border-box; +} + +input[type=text], select, textarea { + width: 100%; + padding: 12px; + border: 1px solid #ccc; + border-radius: 4px; + resize: vertical; +} + +input[type=password], select, textarea { + width: 100%; + padding: 12px; + border: 1px solid #ccc; + border-radius: 4px; + resize: vertical; +} + + +label { + padding: 12px 12px 12px 0; + display: inline-block; +} + +input[type=submit] { + background-color: #4CAF50; + color: white; + padding: 12px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + float: right; +} + +input[type=submit]:hover { + background-color: #45a049; +} + +.container { + border-radius: 5px; + background-color: #f2f2f2; + padding: 20px; +} + +.col-25 { + float: left; + width: 25%; + margin-top: 6px; +} + +.col-75 { + float: left; + width: 75%; + margin-top: 6px; +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} + +/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */ +@media screen and (max-width: 600px) { + .col-25, .col-75, input[type=submit] { + width: 100%; + margin-top: 0; + } +} diff --git a/views/style1.css b/views/style1.css new file mode 100644 index 0000000..3149371 --- /dev/null +++ b/views/style1.css @@ -0,0 +1,46 @@ +@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); + + +body{ + margin: 0; + font-size: .9rem; + font-weight: 400; + line-height: 1.6; + color: #212529; + text-align: left; + background-color: #f5f8fa; +} + +.navbar-laravel +{ + box-shadow: 0 2px 4px rgba(0,0,0,.04); +} + +.navbar-brand , .nav-link, .my-form, .login-form +{ + font-family: Raleway, sans-serif; +} + +.my-form +{ + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.my-form .row +{ + margin-left: 0; + margin-right: 0; +} + +.login-form +{ + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.login-form .row +{ + margin-left: 0; + margin-right: 0; +} \ No newline at end of file diff --git a/views/why3.html b/views/why3.html new file mode 100644 index 0000000..3107380 --- /dev/null +++ b/views/why3.html @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + AuthentiFi + + + + + + + + + + +
+
+
+
+
Generated QR Code
+
+
+
+
+
+
+
+

Andrew Smith

+

Model: Senior Developer

+

Description: Semantics

+

Manufacturer Name: Data Visualization

+

Manufacturer Location: Data Visualization

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + +