├── .dockerignore ├── .gitignore ├── .meteor ├── .finished-upgraders ├── .gitignore ├── .id ├── cordova-plugins ├── packages ├── platforms ├── release └── versions ├── .travis.yml ├── API.md ├── Dockerfile ├── Dockerfile.run ├── LICENSE ├── README.md ├── api └── server │ ├── README.md │ ├── api.js │ └── v1 │ ├── ai-messages.js │ ├── devices.js │ ├── faces.js │ ├── groups.js │ └── persons.js ├── build_bundle.sh ├── client ├── 0_ios_push_init.js ├── 2dVirtualEnvironment │ ├── VEOffice.html │ ├── VEOffice.js │ ├── VEWorld.html │ ├── VEWorld.js │ ├── VEWorld.less │ └── office.less ├── 4_router_client.coffee ├── addressBook │ ├── addressBook.coffee │ ├── addressBook.html │ ├── addressBook.less │ └── groupsList.coffee │ │ ├── groupsList.coffee │ │ ├── groupsList.html │ │ └── groupsList.less ├── android_gcm_init.coffee ├── android_jpush_init.js ├── autolabel │ ├── autolabel.html │ ├── autolabel.js │ └── autolabel.less ├── autologin │ └── anonymousLogin.coffee ├── bell │ ├── bell.coffee │ ├── bell.html │ ├── bell.less │ ├── post-tips.html │ └── post-tips.js ├── chatGroups │ ├── bubbleTips │ │ ├── bubbleTips.html │ │ ├── bubbleTips.js │ │ └── bubbleTips.less │ ├── chatGroups.coffee │ ├── chatGroups.html │ ├── checkInOutMsgList │ │ ├── checkInOutMsgList.coffee │ │ ├── checkInOutMsgList.html │ │ └── checkInOutMsgList.less │ ├── clusteringFix │ │ ├── clusteringFix.html │ │ ├── clusteringFix.js │ │ ├── clusteringFix.less │ │ ├── clusteringFixPerson.html │ │ └── clusteringFixPerson.js │ ├── groupDevices │ │ ├── groupDevices.html │ │ ├── groupDevices.js │ │ └── groupDevices.less │ ├── groupPersons │ │ ├── groupPerson.html │ │ └── groupPerson.js │ ├── groupScore │ │ ├── groupInstallTest.html │ │ ├── groupInstallTest.js │ │ └── groupInstallTest.less │ ├── groupsProfile │ │ ├── groupAllUser │ │ │ ├── groupAllUser.coffee │ │ │ ├── groupAllUser.html │ │ │ └── groupAllUser.less │ │ ├── groupCheckInOutInfo │ │ │ ├── groupCheckInoutInfo.html │ │ │ ├── groupCheckInoutInfo.js │ │ │ └── groupCheckInoutInfo.less │ │ ├── groupPhoto │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── groupUserHide │ │ │ ├── groupUserHide.html │ │ │ ├── groupUserHide.js │ │ │ └── groupUserHide.less │ │ ├── groupsProfile.coffee │ │ ├── groupsProfile.html │ │ ├── groupsProfile.less │ │ └── inviteFriendIntoGroup │ │ │ ├── inviteFriendIntoGroup.coffee │ │ │ ├── inviteFriendIntoGroup.html │ │ │ └── inviteFriendIntoGroup.less │ ├── newLabel │ │ ├── newLabel.html │ │ ├── new_label.js │ │ └── new_label.less │ ├── recognitionCounts │ │ ├── recognitionCounts.html │ │ └── recognitionCounts.js │ └── style.less ├── comFadeIn.less ├── companyLists │ ├── companyItem.js │ ├── companyLists.coffee │ ├── companyLists.html │ ├── companyLists.js │ ├── companyLists.less │ ├── perfShow.coffee │ ├── perfShow.html │ └── perfShow.js ├── compatibility │ ├── crop.css │ ├── crop.js │ └── readability_class.js ├── connection │ └── connection.coffee ├── ddp_url.html ├── deviceDashboard │ ├── deviceDashboard.html │ ├── deviceDashboard.js │ └── deviceDashboard.less ├── disable_console_log.js ├── disable_copy_past.css ├── disable_hot_code_push.js ├── explore │ ├── changeSeriesImage.html │ ├── changeSeriesImage.js │ ├── explore.coffee │ ├── explore.html │ ├── explore.less │ ├── mySeries.coffee │ ├── mySeries.html │ ├── selectAuthorPosts.js │ ├── seletAutoPosts.html │ ├── series.html │ ├── series.js │ ├── series.less │ ├── seriesFooter.html │ ├── seriesHint │ │ ├── seriesHint.html │ │ └── seriesHint.js │ ├── seriesList.coffee │ ├── seriesList.html │ ├── seriesList.less │ ├── shareSeries.html │ └── shareSeries.js ├── faces │ ├── faces.html │ ├── faces.js │ └── faces.less ├── footer.coffee ├── footer.html ├── group │ ├── add.coffee │ ├── add.html │ ├── add.less │ ├── loadingPost.html │ └── selectTemplate │ │ ├── selectTemplate.coffee │ │ ├── selectTemplate.html │ │ └── selectTemplate.less ├── groupsProfile │ ├── groupAllUser │ │ ├── groupAllUser.coffee │ │ ├── groupAllUser.html │ │ └── groupAllUser.less │ ├── groupsProfile.coffee │ ├── groupsProfile.html │ └── groupsProfile.less ├── header.less ├── home │ ├── home.coffee │ └── home.html ├── homeAI │ ├── addHomeAIBox.coffee │ ├── addHomeAIBox.html │ ├── addHomeAIBox.less │ └── scanFailPrompt │ │ ├── scanFailPrompt.coffee │ │ ├── scanFailPrompt.html │ │ └── scanFailPrompt.less ├── homePage │ ├── homePage.html │ ├── homePage.js │ ├── homePage.less │ ├── homePage_bak.html │ ├── homePage_bak.js │ ├── qrcode_device_add.js │ ├── scanTips │ │ ├── scanTips.html │ │ ├── scanTips.js │ │ └── scanTips.less │ ├── workStatusPopPage.html │ ├── workStatusPopPage.js │ └── workStatusPopPage.less ├── index.html ├── introductoryPage │ ├── introductoryPage.coffee │ ├── introductoryPage.html │ └── introductoryPage.less ├── intros │ ├── intros.html │ ├── intros.js │ └── intros.less ├── isHaveStranger │ ├── isHaveStranger.html │ ├── isHaveStranger.js │ └── isHaveStranger.less ├── isIOS.coffee ├── lib │ ├── 01_mobiscroll │ │ ├── mobiscroll.custom-3.0.0-beta2.min.css │ │ └── mobiscroll.custom-3.0.0-beta2.min.js │ ├── DateExtend.js │ ├── amplify.1.1.2.js │ ├── animate.css │ ├── animate_define.js │ ├── async.2.0.1.js │ ├── banner.css │ ├── banner.html │ ├── banner.js │ ├── basic.css │ ├── compare-versions_3_4_0.js │ ├── cordova-exif.js │ ├── extract.coffee │ ├── file_uploader.js │ ├── get_base64.js │ ├── get_diff_time.js │ ├── hammer.min.js │ ├── hashOnString.js │ ├── image-fit-cover.js │ ├── jquery-near-viewport.min.js │ ├── jquery.above_viewport_bottom.js │ ├── jquery.ba-throttle-debounce.js │ ├── jquery.bpopup.0.11.0.js │ ├── jquery.collapse.js │ ├── jquery.gridster.0.5.6.js │ ├── jquery.gridster.css │ ├── jquery.lazyload.1.9.3.js │ ├── jquery.linkify.js │ ├── jquery.onfontresize.js │ ├── jquery.p2r.js │ ├── jquery.scrollevent.js │ ├── jquery.swipebox.1.3.0.2.js │ ├── jquery.textarea_autosize.0.4.1.js │ ├── jquery.toolbar.js │ ├── jquery.toolbars.css │ ├── modernizr-2.6.2.min.js │ ├── mousewheel.js │ ├── mqttws31.js │ ├── pinyin.js │ ├── plugins.min.js │ ├── ripple_effect.css │ ├── ripple_effect_example.html │ ├── ripple_effects.js │ ├── scrollMonitor.1.0.12.js │ ├── string_startswith.js │ ├── swipebox.1.3.0.css │ ├── take_photo.js │ ├── textresizedetector.js │ ├── toastr.2.1.2.js │ ├── toastr.2.1.2.less │ ├── updateAPP.css │ └── url_analyser.coffee ├── location.coffee ├── main.js ├── main.less ├── mqtt_mq_client.js ├── mqtt_mq_client_native.js ├── padding │ ├── padding.coffee │ ├── padding.html │ └── padding.less ├── piwik.coffee ├── posts │ ├── 0_showPostsStyle.coffee │ ├── commentBar.coffee │ ├── commentBar.html │ ├── commentBar.less │ ├── grider.css │ ├── header.less │ ├── help.coffee │ ├── help.css │ ├── help.html │ ├── hotPosts.html │ ├── hotPosts.js │ ├── hotPosts.less │ ├── import.coffee │ ├── import.html │ ├── import.js │ ├── import.less │ ├── listPosts.css │ ├── loadingPost.html │ ├── loadingpost.coffee │ ├── loadingpost.less │ ├── postItem.coffee │ ├── postItem.html │ ├── postItem.less │ ├── postNotFound.html │ ├── postNotFound.less │ ├── redirect.coffee │ ├── redirect.html │ ├── showPostThumbHandler.coffee │ ├── showPosts.coffee │ ├── showPosts.html │ ├── showPosts.less │ ├── spinner.coffee │ ├── spinner.css │ ├── spinner.html │ ├── style.css │ └── unpublish.html ├── public.coffee ├── public.less ├── registration │ ├── authOverlay │ │ ├── authOverlay.css │ │ ├── authOverlay.html │ │ └── authOverlay.js │ ├── loginForm │ │ ├── loginForm.coffee │ │ ├── loginForm.html │ │ └── loginForm.less │ ├── registerFollow │ │ ├── registerFollow.coffee │ │ ├── registerFollow.css │ │ └── registerFollow.html │ └── signupForm │ │ ├── deal.coffee │ │ ├── deal.html │ │ ├── signupForm.coffee │ │ ├── signupForm.html │ │ └── signupForm.less ├── reporter │ ├── reporter.js │ ├── reporter.less │ └── repoter.html ├── resetPwd │ ├── resetPwd.html │ └── resetPwd.js ├── resetpassword │ ├── reset-password.html │ ├── reset-password.js │ └── reset-password.less ├── savetips │ ├── savetip.html │ ├── savetip.js │ └── savetip.less ├── scannerAddDevice │ ├── scannerAddDevice.html │ ├── scannerAddDevice.js │ ├── scannerAddDevice.less │ ├── selectCreateGroup.html │ └── selectCreateGroup.js ├── scene │ ├── scene.coffee │ ├── scene.html │ └── scene.less ├── search │ ├── search.coffee │ ├── search.html │ └── search.js ├── series │ ├── series.html │ ├── series.js │ └── series.less ├── simpleUserProfile │ ├── simpleUserProfile.coffee │ ├── simpleUserProfile.html │ └── simpleUserProfile.less ├── social │ ├── chatContent.coffee │ ├── chatContent.html │ ├── chatContent.less │ ├── contactsList.coffee │ ├── contactsList.html │ ├── contactsList.less │ ├── discover.coffee │ ├── discover.html │ ├── discover.less │ ├── me.coffee │ ├── me.html │ ├── me.less │ ├── mePosts.js │ ├── messageDialog.coffee │ ├── messageDialog.html │ ├── messageDialogInfo.coffee │ ├── messageDialogInfo.html │ ├── messageGroup.coffee │ ├── messageGroup.html │ ├── pinterest.css │ ├── profile.html │ ├── socialBar.coffee │ ├── socialBar.html │ ├── socialBar.less │ ├── userProfile.coffee │ ├── userProfile.html │ ├── userProfile.less │ ├── userProfileBox.coffee │ └── userProfileBox.html ├── splashScreen │ ├── splashScreen.html │ ├── splashScreen.js │ ├── swiper.jquery.min.js │ └── swiper.min.css ├── timeline │ ├── 01_openVideoInBrowser.js │ ├── deviceStatusTip.html │ ├── deviceStatusTip.js │ ├── deviceStatusTip.less │ ├── timeline.html │ ├── timeline.js │ ├── timelineAlbum.html │ ├── timelineAlbum.js │ └── timelineAlbum.less ├── tips │ ├── addPost.css │ ├── addPost.html │ ├── addPost.js │ ├── tips.css │ ├── tips.html │ └── tips.js ├── update_current_version.js ├── user-checkout │ ├── confirm.html │ ├── confirm.js │ └── confirm.less ├── user-checkout_client.js ├── user │ ├── bindGroupUser.html │ ├── bindGroupUser.js │ ├── bindGroupUser.less │ ├── collectList.html │ ├── collect_list.js │ ├── collect_list.less │ ├── dashboard │ │ ├── dashboard.coffee │ │ └── dashboard.html │ ├── dayTasks.html │ ├── dayTasks.js │ ├── follow │ │ ├── followers.coffee │ │ └── followers.html │ ├── management │ │ ├── management.coffee │ │ └── management.html │ ├── onLogin.js │ ├── user.coffee │ ├── user.html │ ├── user.js │ └── user.less ├── webHome.html ├── webHome.js ├── webHome.less └── wookmark │ ├── imagesloaded.pkgd.js │ ├── template.html │ ├── wookmark.2.0.1.js │ ├── wookmark.coffee │ └── wookmark_main.css ├── i18n ├── en.i18n.json ├── new_en.i18n.json_bkup └── zh.i18n.json ├── imports └── ui │ └── stylesheets │ ├── addPost.less │ ├── addTopicComment.less │ ├── bell.less │ ├── chatContent.less │ ├── chatGroups.less │ ├── color.less │ ├── comFadeIn.less │ ├── commentBar.less │ ├── contactsList.less │ ├── dashboard.less │ ├── discover.less │ ├── followers.less │ ├── footer.less │ ├── header.less │ ├── home.less │ ├── hotPosts.less │ ├── loadingpost.less │ ├── loginForm.less │ ├── mainImagesList.less │ ├── management.less │ ├── me.less │ ├── messageDialog.less │ ├── messageDialogInfo.less │ ├── messageGroup.less │ ├── newPostsMsg.less │ ├── padding.less │ ├── postNotFound.less │ ├── progressBar.less │ ├── reportPost.less │ ├── search.less │ ├── showPosts.less │ ├── signupForm.less │ ├── socialBar.less │ ├── splashScreen.less │ ├── thanksReport.less │ ├── unpublish.less │ ├── user.less │ └── userProfile.less ├── lib ├── package-lock.json ├── package.json ├── packages.json ├── packages ├── .gitignore ├── .npm │ └── package │ │ ├── .gitignore │ │ ├── README │ │ └── npm-shrinkwrap.json ├── accounts-base │ ├── .gitignore │ ├── README.md │ ├── accounts_client.js │ ├── accounts_common.js │ ├── accounts_rate_limit.js │ ├── accounts_reconnect_tests.js │ ├── accounts_server.js │ ├── accounts_tests.js │ ├── accounts_url_tests.js │ ├── client_main.js │ ├── client_tests.js │ ├── localstorage_token.js │ ├── package.js │ ├── server_main.js │ ├── server_tests.js │ ├── url_client.js │ └── url_server.js ├── autoupdate │ ├── .gitignore │ ├── QA.md │ ├── README.md │ ├── autoupdate_client.js │ ├── autoupdate_cordova.js │ ├── autoupdate_server.js │ └── package.js ├── echarts │ ├── README.md │ ├── echarts.min.js │ ├── map │ │ ├── china.js │ │ ├── usa.js │ │ └── world.js │ └── package.js ├── fast-render │ ├── .gitignore │ ├── .travis.yml │ ├── .versions │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── lib │ │ ├── client │ │ │ ├── auth.js │ │ │ ├── boot.js │ │ │ ├── ddp_update.js │ │ │ ├── debugger.js │ │ │ ├── fast_render.js │ │ │ └── id_tools.js │ │ ├── server │ │ │ ├── context.js │ │ │ ├── iron_router_support.js │ │ │ ├── namespace.js │ │ │ ├── publish_context.js │ │ │ ├── routes.js │ │ │ └── utils.js │ │ └── utils.js │ ├── package.js │ ├── qa │ │ └── README.md │ ├── tests │ │ ├── client │ │ │ ├── ddp_update.js │ │ │ └── fast_render.js │ │ ├── server │ │ │ ├── context.js │ │ │ └── integration.js │ │ └── utils.js │ └── todo.md ├── inject-data │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── lib │ │ ├── client.js │ │ ├── inject.html │ │ ├── namespace.js │ │ ├── server.js │ │ └── utils.js │ ├── package.js │ └── tests │ │ ├── client.js │ │ ├── init.js │ │ ├── integration.js │ │ └── utils.js ├── meteor-mqtt │ ├── .npm │ │ └── package │ │ │ ├── .gitignore │ │ │ ├── README │ │ │ └── npm-shrinkwrap.json │ ├── .versions │ ├── README.md │ ├── browserMqtt.js │ ├── client.js │ ├── mqtt-tests.js │ ├── package.js │ └── server.js ├── meteor-phonegap-push │ ├── .gitignore │ ├── .npm │ │ └── package │ │ │ ├── .gitignore │ │ │ ├── README │ │ │ └── npm-shrinkwrap.json │ ├── LICENSE.md │ ├── README.md │ ├── android.server.js │ ├── deprecated │ │ ├── meteor-phonegap.js │ │ └── phonegap.client.js │ ├── ios.server.js │ ├── package.js │ ├── plugin.xml │ ├── plugin │ │ └── meteor.cordova.push.js │ ├── push.server.js │ └── versions.json ├── meteor-swipe │ ├── .gitignore │ ├── README.md │ ├── package.js │ ├── swipe │ │ ├── swipe.coffee │ │ ├── swipe.css │ │ └── swipe.html │ └── versions.json ├── npm-container │ ├── .npm │ │ └── package │ │ │ ├── .gitignore │ │ │ ├── README │ │ │ └── npm-shrinkwrap.json │ ├── index.js │ └── package.js ├── simple-chat │ ├── .DS_Store │ ├── client │ │ ├── .DS_Store │ │ ├── app.less │ │ ├── get_diff_time.js │ │ ├── label │ │ │ ├── cropImage.html │ │ │ ├── cropImage.js │ │ │ ├── device.html │ │ │ ├── device.js │ │ │ ├── label.html │ │ │ ├── label.js │ │ │ ├── remove.html │ │ │ └── remove.js │ │ ├── lib │ │ │ ├── .DS_Store │ │ │ ├── base64.js │ │ │ ├── crypto1 │ │ │ │ ├── aes │ │ │ │ │ ├── aes-min.js │ │ │ │ │ └── aes.js │ │ │ │ ├── cbc │ │ │ │ │ ├── cbc-min.js │ │ │ │ │ └── cbc.js │ │ │ │ ├── crypto-1.0.zip │ │ │ │ ├── crypto-md5 │ │ │ │ │ └── crypto-md5.js │ │ │ │ ├── crypto-sha1-hmac-pbkdf2-marc4 │ │ │ │ │ └── crypto-sha1-hmac-pbkdf2-marc4.js │ │ │ │ ├── crypto-sha1-hmac-pbkdf2-ofb-aes │ │ │ │ │ └── crypto-sha1-hmac-pbkdf2-ofb-aes.js │ │ │ │ ├── crypto-sha1-hmac-pbkdf2-rabbit │ │ │ │ │ └── crypto-sha1-hmac-pbkdf2-rabbit.js │ │ │ │ ├── crypto-sha1-hmac-pbkdf2 │ │ │ │ │ └── crypto-sha1-hmac-pbkdf2.js │ │ │ │ ├── crypto-sha1 │ │ │ │ │ └── crypto-sha1.js │ │ │ │ ├── crypto-sha256 │ │ │ │ │ └── crypto-sha256.js │ │ │ │ ├── crypto │ │ │ │ │ ├── crypto-min.js │ │ │ │ │ └── crypto.js │ │ │ │ ├── hmac │ │ │ │ │ ├── hmac-min.js │ │ │ │ │ └── hmac.js │ │ │ │ ├── marc4 │ │ │ │ │ ├── marc4-min.js │ │ │ │ │ └── marc4.js │ │ │ │ ├── md5 │ │ │ │ │ ├── md5-min.js │ │ │ │ │ └── md5.js │ │ │ │ ├── ofb │ │ │ │ │ ├── ofb-min.js │ │ │ │ │ └── ofb.js │ │ │ │ ├── pbkdf2 │ │ │ │ │ ├── pbkdf2-min.js │ │ │ │ │ └── pbkdf2.js │ │ │ │ ├── rabbit │ │ │ │ │ ├── rabbit-min.js │ │ │ │ │ └── rabbit.js │ │ │ │ ├── sha1 │ │ │ │ │ ├── sha1-min.js │ │ │ │ │ └── sha1.js │ │ │ │ └── sha256 │ │ │ │ │ ├── sha256-min.js │ │ │ │ │ └── sha256.js │ │ │ └── plupload-2.1.2 │ │ │ │ ├── .DS_Store │ │ │ │ ├── js │ │ │ │ ├── Moxie.swf │ │ │ │ ├── Moxie.xap │ │ │ │ ├── moxie.js │ │ │ │ ├── moxie.min.js │ │ │ │ ├── plupload.dev.js │ │ │ │ ├── plupload.full.min.js │ │ │ │ └── plupload.min.js │ │ │ │ ├── license.txt │ │ │ │ └── readme.md │ │ ├── nlp_label │ │ │ ├── chatItemUrl.html │ │ │ ├── chatItemUrl.js │ │ │ ├── chatItemUrl.less │ │ │ ├── nlp_device.html │ │ │ ├── nlp_device.js │ │ │ ├── nlp_error.html │ │ │ ├── nlp_error.js │ │ │ ├── nlp_label.html │ │ │ ├── nlp_label.js │ │ │ ├── nlp_remove.html │ │ │ └── nlp_remove.js │ │ ├── oneself_msg │ │ │ ├── oneself_msg.html │ │ │ └── oneself_msg.js │ │ ├── router.js │ │ ├── tips │ │ │ ├── tips.html │ │ │ ├── tips.js │ │ │ └── tips.less │ │ ├── to-chat │ │ │ ├── index.html │ │ │ ├── label.html │ │ │ ├── tools_bar.html │ │ │ └── tools_bar.js │ │ ├── upload.config.js │ │ └── upload.js │ ├── config.js │ ├── images │ │ ├── .DS_Store │ │ ├── account.png │ │ ├── back.png │ │ ├── groupsProfile.png │ │ ├── image.png │ │ ├── nlp_tips1.jpg │ │ ├── nlp_tips2.jpg │ │ ├── sendingBmp.gif │ │ └── tips.jpg │ ├── lib │ │ ├── collections.js │ │ ├── config.js │ │ └── docs │ │ │ ├── groups.json │ │ │ ├── message.json │ │ │ └── msg-session.json │ ├── package.js │ ├── server │ │ ├── method.js │ │ └── subs.js │ └── simple-chat.js ├── touch-js │ ├── package.js │ └── touch-0.2.11.js ├── video-analysis │ ├── README.md │ ├── client │ │ ├── index.html │ │ ├── index.js │ │ ├── index.less │ │ ├── layout.html │ │ ├── router.js │ │ └── template │ │ │ ├── detail.html │ │ │ ├── detail.js │ │ │ ├── devices.html │ │ │ ├── devices.js │ │ │ ├── history.html │ │ │ ├── history.js │ │ │ ├── search.html │ │ │ ├── search.js │ │ │ ├── videoImport.html │ │ │ ├── videoImport.js │ │ │ ├── videoInfo.html │ │ │ ├── videoInfo.js │ │ │ ├── videos.html │ │ │ └── videos.js │ ├── images │ │ ├── dva_position.png │ │ ├── dva_size.png │ │ ├── homeai.png │ │ ├── loading.gif │ │ └── radar_scan.png │ ├── lib │ │ └── collections.js │ ├── package.js │ └── server │ │ └── router.js ├── video-js │ ├── lib │ │ ├── font │ │ │ ├── VideoJS.eot │ │ │ ├── VideoJS.svg │ │ │ ├── VideoJS.ttf │ │ │ └── VideoJS.woff │ │ ├── lang │ │ │ └── zh-CN.js │ │ ├── video-js.min.css │ │ ├── video-js.swf │ │ └── video.min.js │ ├── package.js │ └── plugins │ │ ├── ads │ │ ├── videojs.ads.css │ │ ├── videojs.ads.js │ │ └── videojs.ads.min.js │ │ ├── eme │ │ ├── videojs-contrib-eme.js │ │ └── videojs-contrib-eme.min.js │ │ ├── hls │ │ ├── videojs-contrib-hls.js │ │ └── videojs-contrib-hls.min.js │ │ ├── qualityselector │ │ ├── videojs-qualityselector.css │ │ ├── videojs-qualityselector.js │ │ └── videojs-qualityselector.min.js │ │ ├── replay │ │ ├── lang │ │ │ └── en.js │ │ ├── videojs-replay.css │ │ ├── videojs-replay.js │ │ └── videojs-replay.min.js │ │ ├── titlebar │ │ ├── videojs-titlebar.css │ │ └── videojs-titlebar.js │ │ └── watermark │ │ ├── videojs-watermark.css │ │ ├── videojs-watermark.js │ │ └── videojs-watermark.min.js └── webapp │ ├── .gitignore │ ├── .npm │ └── package │ │ ├── .gitignore │ │ ├── README │ │ └── npm-shrinkwrap.json │ ├── README.md │ ├── package.js │ ├── webapp_client.js │ ├── webapp_client_tests.js │ ├── webapp_cordova.js │ ├── webapp_server.js │ └── webapp_tests.js ├── private ├── public ├── 1.gif ├── 2.gif ├── 3.gif ├── 404.png ├── aboutBg.png ├── active_report.png ├── add-series.png ├── addBtn.jpg ├── addDevice.png ├── addUser.png ├── add_more.png ├── addressbook.png ├── addressbook_s.png ├── apple-app-site-association ├── arrow_top_right.png ├── autolabel.png ├── banner_01.jpg ├── banner_02.jpg ├── banner_btn_down.png ├── banner_btn_up.png ├── biaozhu.png ├── book-icon.png ├── bubbleTip │ ├── bubblehint1.png │ ├── bubblehint2.png │ └── bubblehint3.png ├── camera_offline.svg ├── camera_online.svg ├── chat_left.png ├── chat_right.png ├── check_canlder.png ├── checked_false.png ├── checked_true.png ├── closeBtn.png ├── commentGray.png ├── createGroup2.jpg ├── createGroup3.png ├── delete-2.png ├── delete-all.png ├── delete.png ├── device.png ├── device_icon_192.png ├── electric_quantity.png ├── email.png ├── exit-cancel.jpg ├── face_box_offline.svg ├── face_box_online.svg ├── failed.png ├── favicon.ico ├── female.png ├── follows │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 21.jpg │ ├── 22.jpg │ ├── 23.jpg │ ├── 31.jpg │ ├── 32.jpg │ ├── 33.jpg │ ├── 41.jpg │ ├── 42.jpg │ ├── 43.jpg │ ├── 51.jpg │ ├── 52.jpg │ ├── 53.jpg │ ├── 61.jpg │ ├── 62.jpg │ ├── 63.jpg │ ├── 71.jpg │ ├── 72.jpg │ ├── 73.jpg │ ├── icon1.png │ ├── icon2.png │ ├── icon3.png │ ├── icon4.png │ ├── icon5.png │ ├── icon6.png │ └── icon7.png ├── fonts │ ├── FontAwesome.otf │ ├── Roboto-Bold-webfont.eot │ ├── Roboto-Bold-webfont.svg │ ├── Roboto-Bold-webfont.ttf │ ├── Roboto-Bold-webfont.woff │ ├── Roboto-Light-webfont.eot │ ├── Roboto-Light-webfont.svg │ ├── Roboto-Light-webfont.ttf │ ├── Roboto-Light-webfont.woff │ ├── Roboto-Regular-webfont.eot │ ├── Roboto-Regular-webfont.svg │ ├── Roboto-Regular-webfont.ttf │ ├── Roboto-Regular-webfont.woff │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ └── fontawesome-webfont.woff ├── frends-msg.svg ├── group_set.png ├── group_test.png ├── group_users.png ├── helpImgs │ ├── dr_01.jpg │ ├── dr_01en.jpg │ ├── dr_02.jpg │ ├── dr_02en.jpg │ ├── dr_03.jpg │ ├── dr_03en.jpg │ ├── dr_04.jpg │ ├── dr_04en.jpg │ ├── dr_05.jpg │ ├── dr_05en.jpg │ ├── dr_06.jpg │ ├── dr_06en.jpg │ ├── dr_07.jpg │ ├── dr_07en.jpg │ ├── dr_08.jpg │ ├── dr_08en.jpg │ ├── dr_09.jpg │ ├── dr_09en.jpg │ ├── dr_10.jpg │ ├── dr_10en.jpg │ ├── dr_11.jpg │ ├── dr_11en.jpg │ ├── sprite.png │ ├── top_00.jpg │ └── top_00en.jpg ├── hint.jpg ├── homeAI │ ├── addHomeAIBoxBg.png │ ├── homeIcon.png │ └── smartIcon.png ├── homeai.png ├── i18n │ ├── tap-i18n.json │ └── zh.json ├── icon-2.png ├── icon.png ├── icon │ ├── close.svg │ ├── icon-head-handle.png │ ├── icon-no.png │ ├── icon-yes.png │ └── right.svg ├── images │ ├── bg.jpg │ ├── dow.png │ ├── dow2.png │ ├── icon.png │ ├── logo.png │ ├── sprite.png │ ├── sprite2.png │ ├── zn_e_01.jpg │ ├── zn_e_02.jpg │ ├── zn_i_01.jpg │ ├── zn_o_01.jpg │ ├── zn_o_02.jpg │ ├── zn_p_01.jpg │ ├── zn_p_02.jpg │ ├── zn_pass_01.jpg │ ├── zn_q_01.jpg │ ├── zn_q_02.jpg │ ├── zn_r_01.jpg │ ├── zn_r_02.jpg │ ├── zn_r_03.jpg │ ├── zn_t_01.jpg │ ├── zn_t_02.jpg │ ├── zn_u_01.jpg │ ├── zn_u_02.jpg │ ├── zn_w_01.jpg │ ├── zn_w_02.jpg │ └── zn_y_01.jpg ├── img │ ├── 48X48-icon_54.png │ ├── 48X48create_32.png │ ├── 48X48follow_20.png │ ├── 48X48follow_60.png │ ├── 48X48home_12.png │ ├── 48X48home_52.png │ ├── 48X48imassage_56.png │ ├── 48X48lock_76.png │ ├── 48X48massage_16.png │ ├── 48X48me_18.png │ ├── 48X48me_58.png │ ├── 48X48screen_34.png │ ├── 48X48search_14.png │ ├── add.png │ ├── admin-portal.png │ ├── arrow-down.png │ ├── arrow-up.png │ ├── b_like.png │ ├── b_unlike.png │ ├── bellBg.jpg │ ├── bg.jpg │ ├── bg.png │ ├── bg2.jpg │ ├── cd-arrow.svg │ ├── chat-icon.png │ ├── closebtn.png │ ├── company-loading.gif │ ├── company-nodata.png │ ├── creator-portal.png │ ├── default-company-logo.png │ ├── demo-1.jpg │ ├── download.png │ ├── download_icon.png │ ├── fa-comment-ss.png │ ├── gif │ │ ├── a.png │ │ ├── b.png │ │ ├── c.png │ │ ├── d.png │ │ ├── e.png │ │ ├── f.png │ │ ├── g.png │ │ ├── h.png │ │ ├── i.png │ │ ├── j.png │ │ ├── k.png │ │ ├── l.png │ │ ├── m.png │ │ ├── n.png │ │ ├── o.png │ │ ├── p.png │ │ ├── q.png │ │ ├── r.png │ │ ├── s.png │ │ ├── t.png │ │ ├── u.png │ │ └── v.png │ ├── home_clock_green.png │ ├── home_clock_orangered.png │ ├── home_clock_red.png │ ├── hotpost_disable.png │ ├── hotpost_enable.png │ ├── hotshare_animoto_1080p.png │ ├── icon-1.png │ ├── icon-2.jpg │ ├── icons.gif │ ├── icons.png │ ├── icons.svg │ ├── label_new_person.svg │ ├── layer_resize.png │ ├── like.gif │ ├── like.png │ ├── likecount.png │ ├── loader.gif │ ├── logo-no-text.png │ ├── logo.png │ ├── momentBg.jpg │ ├── move.png │ ├── nav.jpg │ ├── rateicon.png │ ├── readMore.gif │ ├── typesetting.png │ └── unlike.png ├── import-tip.png ├── import_setup.png ├── import_setup_800.png ├── install-test.png ├── introductoryPage.png ├── intros │ ├── arrow-1.png │ ├── arrow-down.png │ ├── home-page-tip1.png │ ├── km-demo-tip.png │ ├── posts-groupchart-tip.png │ ├── seriesList-hint1.png │ ├── seriesList-hint2.png │ ├── seriesList-hint3.png │ └── view-daily-tip.png ├── isLoading.gif ├── islatest.png ├── label_failure.png ├── label_new_person.png ├── label_stranger.png ├── label_success.png ├── labeling.png ├── laile.png ├── loadError.png ├── loading-2.gif ├── loading.gif ├── loginbg1.png ├── loginbg1en.jpg ├── loginbg2.jpg ├── logo.png ├── male.png ├── more.png ├── moshengren.png ├── music_pic_default.png ├── new_logo.png ├── nogroup_bg.png ├── noimage.png ├── notallow.png ├── officialChat.jpg ├── offline_face_box.svg ├── online_face_box.svg ├── other.png ├── play_sprite.png ├── processbarbg.jpg ├── processbaricon.png ├── progress.png ├── prompt_close.png ├── push.png ├── recently.png ├── resources │ ├── splash_theme_1080_1440.png │ ├── splash_theme_1080_1920.png │ ├── splash_theme_1242_2208.png │ ├── splash_theme_1536_2048.png │ ├── splash_theme_320_470.png │ ├── splash_theme_480_640.png │ ├── splash_theme_640_1136.png │ ├── splash_theme_640_960.png │ ├── splash_theme_720_960.png │ ├── splash_theme_750_1334.png │ └── splash_theme_768_1024.png ├── reviewing.png ├── savetip │ ├── savehint1.png │ └── savehint2.png ├── scan_b.png ├── scanbarcode.png ├── scanlancamera.png ├── scantip │ ├── scanhint1.png │ ├── scanhint2.png │ └── scanhint3.png ├── select.svg ├── select_n.png ├── select_n.svg ├── select_p.png ├── select_p.svg ├── series-select-n.png ├── series-select-p.png ├── series-share.svg ├── series-subscribe.svg ├── seriesList_blank.png ├── share │ ├── share_more.png │ ├── share_qq_friends.png │ ├── share_qq_qzone.png │ ├── share_weibo.png │ ├── share_weixin_friends.png │ └── share_weixin_timeline.png ├── sharereadingroombg.png ├── sign.png ├── splashScreen │ ├── m1.jpg │ ├── m2.jpg │ ├── m3.jpg │ └── m4.jpg ├── statics │ ├── bundle-post-1.2.0.min.js │ ├── bundle-post-1.2.1.min.js │ ├── bundle-post-1.2.10.min.js │ ├── bundle-post-1.2.11.min.js │ ├── bundle-post-1.2.12.min.js │ ├── bundle-post-1.2.13.min.js │ ├── bundle-post-1.2.15.min.js │ ├── bundle-post-1.2.16.min.js │ ├── bundle-post-1.2.17.min.js │ ├── bundle-post-1.2.18.min.js │ ├── bundle-post-1.2.19.min.js │ ├── bundle-post-1.2.2.min.js │ ├── bundle-post-1.2.20.min.js │ ├── bundle-post-1.2.21.min.js │ ├── bundle-post-1.2.22.min.js │ ├── bundle-post-1.2.23.min.js │ ├── bundle-post-1.2.24.min.js │ ├── bundle-post-1.2.26.min.js │ ├── bundle-post-1.2.27.min.js │ ├── bundle-post-1.2.28.min.js │ ├── bundle-post-1.2.29.min.js │ ├── bundle-post-1.2.3.min.js │ ├── bundle-post-1.2.30.min.js │ ├── bundle-post-1.2.4.min.js │ ├── bundle-post-1.2.5.min.js │ ├── bundle-post-1.2.6.min.js │ ├── bundle-post-1.2.7.min.js │ ├── bundle-post-1.2.8.min.js │ ├── bundle-post-1.2.9.min.js │ ├── bundle-post.min.js │ ├── bundle-social-1.2.0.min.js │ ├── bundle-social-1.2.1.min.js │ ├── bundle-social-1.2.11.min.js │ ├── bundle-social-1.2.12.min.js │ ├── bundle-social-1.2.13.min.js │ ├── bundle-social-1.2.14.min.js │ ├── bundle-social-1.2.15.min.js │ ├── bundle-social-1.2.16.min.js │ ├── bundle-social-1.2.17.min.js │ ├── bundle-social-1.2.18.min.js │ ├── bundle-social-1.2.19.min.js │ ├── bundle-social-1.2.2.min.js │ ├── bundle-social-1.2.21.min.js │ ├── bundle-social-1.2.22.min.js │ ├── bundle-social-1.2.24.min.js │ ├── bundle-social-1.2.25.min.js │ ├── bundle-social-1.2.26.min.js │ ├── bundle-social-1.2.27.min.js │ ├── bundle-social-1.2.28.min.js │ ├── bundle-social-1.2.29.min.js │ ├── bundle-social-1.2.3.min.js │ ├── bundle-social-1.2.30.min.js │ ├── bundle-social-1.2.32.min.js │ ├── bundle-social-1.2.4.min.js │ ├── bundle-social-1.2.5.min.js │ ├── bundle-social-1.2.6.min.js │ ├── bundle-social-1.2.7.min.js │ ├── bundle-social-1.2.8.min.js │ ├── bundle-social-1.2.9.min.js │ ├── bundle-social.min.js │ ├── jquery-1.12.4.min.js │ ├── libs │ │ ├── font-awesome │ │ │ ├── css │ │ │ │ ├── font-awesome.css │ │ │ │ └── font-awesome.min.css │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── less │ │ │ │ ├── animated.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── core.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── icons.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── mixins.less │ │ │ │ ├── path.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── screen-reader.less │ │ │ │ ├── stacked.less │ │ │ │ └── variables.less │ │ │ └── scss │ │ │ │ ├── _animated.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _variables.scss │ │ │ │ └── font-awesome.scss │ │ ├── jquery │ │ │ └── jquery-1.12.4.min.map │ │ └── wookmark │ │ │ └── wookmark.min.js │ ├── main-1.2.11.css │ ├── main-1.2.13.css │ ├── main-1.2.14.css │ ├── main-1.2.15.css │ ├── main-1.2.16.css │ ├── main-1.2.17.css │ ├── main-1.2.18.css │ ├── main-1.2.19.css │ ├── main-1.2.21.css │ ├── main-1.2.22.css │ ├── main-1.2.24.css │ ├── main-1.2.26.css │ ├── main-1.2.27.css │ └── main-1.2.9.css ├── stop_play.png ├── stranger.png ├── swiper.gif ├── sysMessages.png ├── tagChat.jpg ├── test_fail.png ├── test_success.png ├── theme │ ├── theme1.jpg │ ├── theme2.jpg │ ├── theme3.jpg │ ├── theme4.jpg │ └── theme5.jpg ├── theme_blue │ ├── add.svg │ ├── loginbg1.jpg │ └── loginbg2.jpg ├── thumbsDownBlue.png ├── thumbsDownGray.png ├── thumbsUpGray.png ├── thumbsUpPink.png ├── tips.png ├── tips_addPost1.png ├── tips_addPost2.png ├── tips_addPost3.png ├── userPicture.png ├── userPlus.png ├── user_new.png ├── usersChat.jpg ├── veWorld │ ├── room_door.jpg │ ├── room_floor.jpg │ ├── room_top.jpg │ ├── room_wall.jpg │ ├── room_wall_clock.png │ ├── room_wall_draw.png │ └── room_window.jpg ├── webbg.jpg ├── webhome │ ├── whbanner1.png │ ├── whbanner2.png │ ├── whbanner3.png │ ├── whbanner4.png │ ├── whbanner5.png │ ├── whbg1.jpg │ ├── whbg2.jpg │ ├── whbg4.jpg │ ├── whbg5.jpg │ └── whicon.png ├── wechat.png ├── what_offline.svg ├── workAIGroupTemplate │ ├── chatBot.jpg │ ├── classification.jpg │ ├── efficiency.jpg │ ├── safety.jpg │ └── sentiment.jpg └── workai.png ├── resource ├── device_icon_192.png ├── icon.png ├── icon_120.png ├── icon_152.png ├── icon_180.png ├── icon_192.png ├── icon_29.png ├── icon_36.png ├── icon_48.png ├── icon_57.png ├── icon_58.png ├── icon_72.png ├── icon_76.png ├── icon_87.png ├── icon_96.png ├── splash_theme_1080_1440.png ├── splash_theme_1080_1920.png ├── splash_theme_1242_2208.png ├── splash_theme_1536_2048.png ├── splash_theme_320_470.png ├── splash_theme_480_640.png ├── splash_theme_640_1136.png ├── splash_theme_640_960.png ├── splash_theme_720_960.png ├── splash_theme_750_1334.png └── splash_theme_768_1024.png ├── server ├── server_package.sh └── settings.json /.dockerignore: -------------------------------------------------------------------------------- 1 | .meteor/local 2 | packages/*/.build* 3 | packages/*/.npm* 4 | node_modules/* 5 | .git/* 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .meteor/* 2 | .idea/* 3 | *.iml 4 | .DS_Store 5 | .vscode 6 | node_modules 7 | .eslintrc.js 8 | *.keystore 9 | -------------------------------------------------------------------------------- /.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | 1.3.0-split-minifiers-package 14 | 1.3.5-remove-old-dev-bundle-link 15 | 1.4.0-remove-old-dev-bundle-link 16 | 1.4.1-add-shell-server-package 17 | -------------------------------------------------------------------------------- /.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | dev_bundle 2 | local 3 | -------------------------------------------------------------------------------- /.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | z6lihvxqt5hg1n86ie 8 | -------------------------------------------------------------------------------- /.meteor/platforms: -------------------------------------------------------------------------------- 1 | browser 2 | server 3 | -------------------------------------------------------------------------------- /.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.4.1.2 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: shell 3 | services: docker 4 | script: 5 | - docker build -f Dockerfile.run . 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM kadirahq/meteord:base 2 | ADD ApiServer.tar.gz /bundle/ 3 | RUN mv /bundle/bundle /built_app 4 | WORKDIR /built_app/programs/server 5 | RUN npm i 6 | RUN npm install bcrypt@0.8.7 7 | RUN rm -rf /bundle 8 | RUN node -v 9 | RUN ls -alh 10 | 11 | -------------------------------------------------------------------------------- /Dockerfile.run: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | RUN apt-get update && apt-get install -y curl python2.7 python-pip build-essential locales \ 3 | && rm -rf /var/lib/apt/lists/* \ 4 | && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 5 | 6 | ENV LANG en_US.utf8 7 | ENV LC_ALL en_US.UTF-8 8 | 9 | RUN curl https://install.meteor.com/?release=1.4.1.2 | sh 10 | ADD ./ /root/apiserver 11 | WORKDIR /root/apiserver 12 | 13 | RUN meteor npm install --save jquery wolfy87-eventemitter eventie 14 | RUN meteor build ../ && rm ../apiserver.tar.gz 15 | CMD meteor run 16 | -------------------------------------------------------------------------------- /api/server/v1/ai-messages.js: -------------------------------------------------------------------------------- 1 | var api = require('../api.js'); 2 | 3 | var Api = api.ApiV1; 4 | 5 | // get 6 | Api.addRoute('ai-messages', { 7 | authRequired: false 8 | }, { 9 | get: function () { 10 | try { 11 | var params = this.queryParams; 12 | var personId = params.personId && params.personId.trim(); 13 | var isRead = (params.isRead && params.isRead.trim()) == 'true'; 14 | 15 | if (!personId) { 16 | throw new Meteor.Error('error-ai-message-param-not-provided', 'The parameter "personId"is required'); 17 | } 18 | 19 | return AiMessages.find({personId: personId, isRead: isRead}).fetch(); 20 | } catch (e) { 21 | return api.failure(e.message, e.error); 22 | } 23 | } 24 | }); -------------------------------------------------------------------------------- /api/server/v1/faces.js: -------------------------------------------------------------------------------- 1 | var api = require('../api.js'); 2 | 3 | var Api = api.ApiV1; 4 | 5 | // get 6 | Api.addRoute('faces/:id', { 7 | authRequired: false 8 | }, { 9 | get: function () { 10 | try { 11 | var id = this.urlParams.id && this.urlParams.id.trim(); 12 | 13 | if (!id) { 14 | throw new Meteor.Error('error-faces-param-not-provided', 'The parameter "id" is required'); 15 | } 16 | 17 | var result = Faces.findOne({ 18 | id: id 19 | }); 20 | 21 | return _.isEmpty(result) ? api.success({ 22 | result: '未找到结果' 23 | }) : result; 24 | } catch (e) { 25 | return api.failure(e.message, e.error); 26 | } 27 | } 28 | }); -------------------------------------------------------------------------------- /build_bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -rf ApiServer.tar.gz 4 | meteor build --architecture=os.linux.x86_64 ../ 5 | mv ../ApiServer.tar.gz ./ 6 | 7 | echo "run \"docker build -t shareai/api_server:version .\"" 8 | -------------------------------------------------------------------------------- /client/2dVirtualEnvironment/VEWorld.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/addressBook/addressBook.less: -------------------------------------------------------------------------------- 1 | 2 | .addressBook .head .rightButton .fa-plus{ 3 | position: relative; 4 | bottom: 8px; 5 | font-size: 8px; 6 | color: #ffffff 7 | } 8 | .addressBook .content{position:relative;padding-top: 40px;padding-bottom: 55px;-webkit-touch-callout: none;background-color: #eee;} 9 | .addressBook .content .eachViewer{ 10 | background-color: white; 11 | } 12 | .addressBook .content .icon{width: 40px;height: 40px;margin: 10px;object-fit: cover;} 13 | .addressBook .content .groupsName{color: black;} 14 | .addressBook .line{text-align:center;width: 100%; height: 1px;} 15 | .addressBook .line span{background: #333; width: 100%; height: 1px; display: block;} -------------------------------------------------------------------------------- /client/bell/post-tips.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/chatGroups/bubbleTips/bubbleTips.js: -------------------------------------------------------------------------------- 1 | Template.bubbleTipHintTemplate.rendered = function () { 2 | $('body').addClass('bubbleTip-html-body'); 3 | }; 4 | -------------------------------------------------------------------------------- /client/chatGroups/bubbleTips/bubbleTips.less: -------------------------------------------------------------------------------- 1 | .bubbleTip-layer{ 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 9999999; 8 | } 9 | .bubbleTip-container{ 10 | position: absolute; 11 | top: 60px; 12 | width: 100%; 13 | text-align: center; 14 | } 15 | .bubbleTip-html-body{overflow-y: hidden !important;} -------------------------------------------------------------------------------- /client/chatGroups/newLabel/new_label.js: -------------------------------------------------------------------------------- 1 | var isShowNoPerson = new ReactiveVar(false); 2 | 3 | Template.newLabel.helpers({ 4 | showNoPersonBtn: function() { 5 | return isShowNoPerson.get(); 6 | } 7 | }); 8 | 9 | Template.newLabel.events({ 10 | 'click .right-handle-btn': function(e) { 11 | e.stopImmediatePropagation(); 12 | isShowNoPerson.set(!isShowNoPerson.get()); 13 | }, 14 | 'click .newLabel-wrap': function() { 15 | if (isShowNoPerson.get()) { 16 | isShowNoPerson.set(false); 17 | } 18 | }, 19 | 'click .no-person-btn': function() { 20 | 21 | }, 22 | 'click .back': function() { 23 | return Router.go('/message'); 24 | } 25 | }); -------------------------------------------------------------------------------- /client/companyLists/perfShow.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | Template.perfShow.helpers 3 | reportUrl: ()-> 4 | Session.get('reportUrl') 5 | title: ()-> 6 | return Session.get('perfShowTitle') || '绩效展示' 7 | Template.perfShow.events 8 | 'click .perfShow .leftButton':(e, t)-> 9 | history.back() 10 | -------------------------------------------------------------------------------- /client/ddp_url.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /client/disable_console_log.js: -------------------------------------------------------------------------------- 1 | if ( Meteor.isClient ){ 2 | var console = {}; 3 | console.log = function(){}; 4 | console.info = function(){}; 5 | window.console = console; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /client/disable_hot_code_push.js: -------------------------------------------------------------------------------- 1 | if(Meteor.isCordova){ 2 | if(Package.reload){ 3 | Package.reload = null; 4 | } 5 | if ( Package.autoupdate.Autoupdate.clearAutoupdateCache ) { 6 | Package.autoupdate.Autoupdate.clearAutoupdateCache = function(a){return true;}; 7 | } 8 | if ( Package.autoupdate.Autoupdate._retrySubscription ) { 9 | Package.autoupdate.Autoupdate._retrySubscription = function(){return true;}; 10 | } 11 | if(Package.autoupdate.Autoupdate.newClientAvailable){ 12 | Package.autoupdate.Autoupdate.newClientAvailable = function(){return false;}; 13 | } 14 | } -------------------------------------------------------------------------------- /client/explore/seriesHint/seriesHint.js: -------------------------------------------------------------------------------- 1 | Template.seriesHint.rendered = function () { 2 | $('body').addClass('intros-html-body'); 3 | }; 4 | -------------------------------------------------------------------------------- /client/homeAI/addHomeAIBox.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | # Template.introductoryPage.rendered=-> 3 | # $('.content').css 'min-height',$(window).height() 4 | 5 | Template.addHomeAIBox.events 6 | 'click .leftButton':(event)-> 7 | Router.go('/scene'); 8 | 'click #addHomeAIBoxBtn':(event)-> 9 | Session.set('addHomeAIBox',true); 10 | window.ScanBarcodeByBarcodeScanner() -------------------------------------------------------------------------------- /client/homeAI/scanFailPrompt/scanFailPrompt.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | # Template.introductoryPage.rendered=-> 3 | # $('.content').css 'min-height',$(window).height() 4 | 5 | Template.scanFailPrompt.events 6 | 'click .rightButton':(event)-> 7 | Session.set('addHomeAIBox',true) 8 | window.ScanBarcodeByBarcodeScanner() -------------------------------------------------------------------------------- /client/homeAI/scanFailPrompt/scanFailPrompt.less: -------------------------------------------------------------------------------- 1 | .scanFailPrompt{ 2 | .head{ 3 | background: rgb(254, 252, 255) !important; 4 | border-bottom-style: solid; 5 | border-bottom-width: 0.1px; 6 | strong{ 7 | color: black; 8 | } 9 | .rightButton{ 10 | color: #37a7fe; 11 | font-weight: 400; 12 | } 13 | } 14 | .content{ 15 | padding-top: 44px; 16 | background: rgb(241, 239, 242); 17 | top: 0; 18 | bottom: 0; 19 | left: 0; 20 | right: 0; 21 | position: fixed; 22 | .item{ 23 | //padding: 20px; 24 | padding: 10px 20px 10px 5px; 25 | font-size: 16px; 26 | font-weight: 400; 27 | height: auto; 28 | span{ 29 | display: block; 30 | margin-left: 30px; 31 | } 32 | i{ 33 | position: absolute; 34 | margin: 8px 10px 0 10px; 35 | font-size: 10px; 36 | } 37 | } 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /client/homePage/scanTips/scanTips.less: -------------------------------------------------------------------------------- 1 | .scantip-layer{ 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 9999999; 8 | } 9 | .scantip-container{ 10 | position: absolute; 11 | bottom: 60px; 12 | width: 100%; 13 | text-align: center; 14 | } 15 | .scantip-html-body{overflow-y: hidden !important;} 16 | #confirmScanTipHintTip{ 17 | background: url(/scantip/scanhint3.png); 18 | background-repeat: no-repeat; 19 | background-size: 100%; 20 | width: 140px; 21 | height: 60px; 22 | margin-top: 20px; 23 | border: none; 24 | outline: none; 25 | cursor: pointer; 26 | z-index: 999999; 27 | } -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/intros/intros.js: -------------------------------------------------------------------------------- 1 | Template.introsPostGroupchat.rendered = function () { 2 | $('body').addClass('intros-html-body'); 3 | $('.savetip-layer').hide(); 4 | }; 5 | -------------------------------------------------------------------------------- /client/intros/intros.less: -------------------------------------------------------------------------------- 1 | .intros-layer{ 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 9999999; 8 | } 9 | .intros-container{ 10 | position: absolute; 11 | bottom: 80px; 12 | width: 100%; 13 | text-align: center; 14 | } 15 | .intros-html-body{overflow-y: hidden !important;} -------------------------------------------------------------------------------- /client/isIOS.coffee: -------------------------------------------------------------------------------- 1 | @isIOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false) 2 | -------------------------------------------------------------------------------- /client/lib/animate_define.js: -------------------------------------------------------------------------------- 1 | if (Meteor.isClient){ 2 | animateOutUpperEffect = "fadeOut"; 3 | animateOutLowerEffect = "fadeOut"; 4 | animatePageTrasitionTimeout = 300; 5 | } -------------------------------------------------------------------------------- /client/lib/banner.css: -------------------------------------------------------------------------------- 1 | #connection-lost-banner { 2 | position: fixed; 3 | z-index: 2000; 4 | text-align: center; 5 | vertical-align: baseline; 6 | width: 100%; 7 | top: 0; 8 | padding-top:10px; 9 | padding-bottom:10px; 10 | border-radius: 0px; 11 | } 12 | 13 | .alert-connection-lost { 14 | border: 0px; 15 | color: black; 16 | background-color: #ffc7c4; 17 | } -------------------------------------------------------------------------------- /client/lib/hashOnString.js: -------------------------------------------------------------------------------- 1 | 2 | if(Meteor.isClient){ 3 | if (!String.prototype.hashCode ){ 4 | String.prototype.hashCode = function() { 5 | var hash = 0, i, chr, len; 6 | if (this.length == 0) return hash; 7 | for (i = 0, len = this.length; i < len; i++) { 8 | chr = this.charCodeAt(i); 9 | hash = ((hash << 5) - hash) + chr; 10 | hash |= 0; // Convert to 32bit integer 11 | } 12 | return hash; 13 | }; 14 | } 15 | } -------------------------------------------------------------------------------- /client/lib/jquery.above_viewport_bottom.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by simba on 4/22/15. 3 | */ 4 | $.fn.isAboveViewPortBottom = function(){ 5 | 6 | var win = $(window); 7 | 8 | var viewport = { 9 | top : win.scrollTop(), 10 | left : win.scrollLeft() 11 | }; 12 | viewport.right = viewport.left + win.width(); 13 | viewport.bottom = viewport.top + win.height(); 14 | 15 | var bounds = this.offset(); 16 | if (bounds == null){ 17 | return 0; 18 | } 19 | bounds.right = bounds.left + this.outerWidth(); 20 | bounds.bottom = bounds.top + this.outerHeight(); 21 | 22 | return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top)); 23 | 24 | }; 25 | -------------------------------------------------------------------------------- /client/lib/jquery.collapse.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SharpAI/ApiServer/a3676a06f52ea02a599a8d4cf3cc24d0dae07c65/client/lib/jquery.collapse.js -------------------------------------------------------------------------------- /client/lib/plugins.min.js: -------------------------------------------------------------------------------- 1 | !function(){for(var o,e=function(){},n=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeStamp","trace","warn"],r=n.length,i=window.console=window.console||{};r--;)o=n[r],i[o]||(i[o]=e)}(); -------------------------------------------------------------------------------- /client/lib/ripple_effect_example.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /client/lib/string_startswith.js: -------------------------------------------------------------------------------- 1 | if ( typeof String.prototype.startsWith != 'function' ) { 2 | String.prototype.startsWith = function( str ) { 3 | return str.length > 0 && this.substring( 0, str.length ) === str; 4 | } 5 | }; -------------------------------------------------------------------------------- /client/padding/padding.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | padding_debug=false 3 | Template.padding.rendered=-> 4 | $lazyitem = this.$('.padding-overlay').parent().find('img.lazy') 5 | $lazyitem.lazyload { 6 | effect : "fadeIn" 7 | effectspeed: 600 8 | threshold: 800 9 | placeholder: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=" 10 | load:-> 11 | padding_debug&&console.log "Frank: style = "+$(this).attr('style') 12 | $(this).parent().actImageFitCover('style') 13 | } 14 | newLayout.setRandomlyBackgroundColor($lazyitem) 15 | -------------------------------------------------------------------------------- /client/padding/padding.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/padding/padding.less: -------------------------------------------------------------------------------- 1 | .padding-overlay{ 2 | height: 0; 3 | width: 0; 4 | } 5 | .padding { 6 | font-size: 25px; 7 | position: relative; 8 | display: inline-block; 9 | width: 1em; 10 | height: 1em; 11 | } -------------------------------------------------------------------------------- /client/posts/help.coffee: -------------------------------------------------------------------------------- 1 | Template.help.rendered=-> 2 | new jQueryCollapse($('#custom-show-hide-example'), 3 | open: -> 4 | this.slideDown 150 5 | return 6 | close: -> 7 | this.slideUp 150 8 | return 9 | ) 10 | Template.help.events 11 | 'click .back':(event)-> 12 | history.back() -------------------------------------------------------------------------------- /client/posts/import.coffee: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SharpAI/ApiServer/a3676a06f52ea02a599a8d4cf3cc24d0dae07c65/client/posts/import.coffee -------------------------------------------------------------------------------- /client/posts/loadingPost.html: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /client/posts/loadingpost.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | Template.loadingPost.rendered=-> 3 | $('.showPosts').css 'min-height',$(window).height() 4 | Template.loadingPost.events 5 | 'click .back' :-> 6 | PUB.back() 7 | -------------------------------------------------------------------------------- /client/posts/loadingpost.less: -------------------------------------------------------------------------------- 1 | .glyphicon-refresh-animate { 2 | -animation: spin .7s infinite linear; 3 | -webkit-animation: spin2 .7s infinite linear; 4 | } 5 | 6 | @-webkit-keyframes spin2 { 7 | from { -webkit-transform: rotate(0deg);} 8 | to { -webkit-transform: rotate(360deg);} 9 | } 10 | 11 | @keyframes spin { 12 | from { transform: scale(1) rotate(0deg);} 13 | to { transform: scale(1) rotate(360deg);} 14 | } 15 | 16 | //.showPosts{position: fixed; left: 0; top: 0; bottom: 0;right: 0;} 17 | .showPosts .content .loading i span{color: #333;} 18 | .showPosts .content .loading i{background-color: rgba(240,240,240,0);} 19 | .showPosts .content .loading { 20 | //width: 0px; 21 | height: 0px; 22 | position: absolute; 23 | top:0; 24 | bottom: 0; 25 | left: 0; 26 | right: 0; 27 | 28 | margin: auto; 29 | text-align: center; 30 | } -------------------------------------------------------------------------------- /client/posts/postNotFound.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/posts/postNotFound.less: -------------------------------------------------------------------------------- 1 | .showPosts .content .loading p{color: #333;} 2 | .showPosts .content .empty { 3 | //width: 0px; 4 | min-height: 100%; 5 | height: 100%; 6 | position: absolute; 7 | top:0; 8 | bottom: 0; 9 | left: 0; 10 | right: 0; 11 | background-color: #F0F0F0; 12 | margin: auto; 13 | text-align: center; 14 | } -------------------------------------------------------------------------------- /client/posts/redirect.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | Template.redirect.rendered = -> 3 | Router.go '/posts/'+Session.get('nextPostID') 4 | -------------------------------------------------------------------------------- /client/posts/redirect.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/posts/spinner.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/posts/unpublish.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/registration/registerFollow/registerFollow.css: -------------------------------------------------------------------------------- 1 | .registerFollow h5{color: gray} 2 | .registerFollow hr{border-color: gray} 3 | .registerFollow .user_head{position: relative} 4 | .registerFollow .user_head i{font-size: 38px; position: absolute;top: 30px;right: 20px;} 5 | .registerFollow .user_head img{border: none;border-radius:50%;} 6 | .registerFollow .follow_user{font-size: 19px;} 7 | .registerFollow .container{border:none} 8 | .registerFollow .container #continue{width: 100%;text-align: center;border: none;border-radius: 8px;padding: 5px;background-color: #00c4ff;font-size: 18px;} 9 | .registerFollow #continue{margin-top: 8px;} 10 | -------------------------------------------------------------------------------- /client/registration/signupForm/deal.coffee: -------------------------------------------------------------------------------- 1 | Template.deal_page.events 2 | 'click #btn_back':-> 3 | if Session.get("dealBack") is "register" 4 | Router.go '/signupForm' 5 | # Meteor.setTimeout -> 6 | # $('.register').css('display',"block") 7 | # $('#register').css('display',"none") 8 | # $('#weibo').css('display',"none") 9 | # $('#login').css('display',"none") 10 | # ,10 11 | else if Session.get("dealBack") is "anonymous" 12 | Router.go '/loginForm' 13 | Meteor.setTimeout -> 14 | $('.agreeDeal').css('display',"block") 15 | ,10 16 | else 17 | Router.go '/loginForm' -------------------------------------------------------------------------------- /client/resetpassword/reset-password.less: -------------------------------------------------------------------------------- 1 | .resetPwdTopbar{opacity: 1;width:100%;margin-left: 0px;height: 6%;background: #454546 ;font-size: 16px;vertical-align: middle;padding-left: 16px !important;line-height: 40px; color: #fff;} 2 | .resetPwddiv{opacity: 0.8;width:80%;margin-left: 10%;background: white;margin-top: 10%;color:black; max-width: 300px;margin: 0 auto !important;} 3 | .resetPwddiv input[type="submit"],#finishReset{ 4 | background:#00c4ff; color: #fff; 5 | } 6 | .sureReset{width:100%;background:#f0f0f0;height:40px;text-align:center;margin-top:20px;padding-top:3px;} 7 | .sureReset input, .sureReset button{width:80px;height:30px;background:#00c4ff; margin-left: 50%; transform:translate(-50%, 0);} 8 | -------------------------------------------------------------------------------- /client/savetips/savetip.js: -------------------------------------------------------------------------------- 1 | Template.saveTipHintTemplate.rendered = function () { 2 | $('body').addClass('savetip-html-body'); 3 | }; 4 | -------------------------------------------------------------------------------- /client/savetips/savetip.less: -------------------------------------------------------------------------------- 1 | .savetip-layer{ 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 9999999; 8 | } 9 | .savetip-container{ 10 | position: absolute; 11 | bottom: 60px; 12 | width: 100%; 13 | text-align: center; 14 | } 15 | .savetip-html-body{overflow-y: hidden !important;} -------------------------------------------------------------------------------- /client/scene/scene.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | # Template.introductoryPage.rendered=-> 3 | # $('.content').css 'min-height',$(window).height() 4 | 5 | Template.scene.events 6 | 'click #workaiScene':(event)-> 7 | window.localStorage.setItem("isWorkAIScene",'true'); 8 | Router.go('/introductoryPage'); 9 | 'click #homeaiScene':(event)-> 10 | window.localStorage.setItem("isWorkAIScene",'false'); 11 | Router.go('/addHomeAIBox'); -------------------------------------------------------------------------------- /client/scene/scene.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/social/chatContent.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | Template.chatContent.rendered=-> 3 | #Meteor.subscribe("msgSession") 4 | Template.chatContent.helpers 5 | withChat: ()-> 6 | withChat 7 | time_diff: (time)-> 8 | now = new Date() 9 | showTime = GetTime0(now - time) 10 | showTime 11 | msgSession: ()-> 12 | MsgSession.find({userId: Meteor.userId()}, {sort: {updateTime: -1}}) 13 | isShowWaitRead: (waitRead)-> 14 | waitRead > 0 15 | isGroup: (sesType)-> 16 | sesType is 'groupChat' or sesType is 'chatNotify' 17 | Template.chatContent.events 18 | 'click .eachChat': (e)-> 19 | Session.set("messageDialog_to", {id: e.currentTarget.id, type: 'session'}) 20 | Session.set("Social.LevelOne.Menu", 'messageDialog') -------------------------------------------------------------------------------- /client/social/chatContent.less: -------------------------------------------------------------------------------- 1 | .chatContent{ 2 | .eachChat{ 3 | .waitRead{width: 18px; height: 18px; line-height: 18px; text-align: center; font-size: 10px; position: absolute; right: 10px; bottom: 13px;border-radius: 50%;background-color: #F43531;color:#fff;} 4 | } 5 | } -------------------------------------------------------------------------------- /client/social/profile.html: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /client/social/userProfileBox.coffee: -------------------------------------------------------------------------------- 1 | if Meteor.isClient 2 | Template.userProfileBox.helpers 3 | displayUserProfileBox:()-> 4 | Session.get('displayUserProfileBox') -------------------------------------------------------------------------------- /client/social/userProfileBox.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /client/timeline/deviceStatusTip.js: -------------------------------------------------------------------------------- 1 | function hideDeviceTipLayer(){ 2 | $('body').removeClass('devicetip-html-body'); 3 | localStorage.setItem('devicetipFlag', true); 4 | deviceStatusVar.set(false); 5 | } 6 | 7 | Template.deviceStatusTip.events({ 8 | 'click .devicetip-layer': function(e) { 9 | e.preventDefault(); 10 | e.stopPropagation(); 11 | hideDeviceTipLayer(); 12 | }, 13 | 'touchstart .devicetip-layer': function(e) { 14 | e.preventDefault(); 15 | e.stopPropagation(); 16 | hideDeviceTipLayer(); 17 | }, 18 | }); -------------------------------------------------------------------------------- /client/timeline/deviceStatusTip.less: -------------------------------------------------------------------------------- 1 | .devicetip-layer{ 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 9999999; 8 | } 9 | .devicetip-container{ 10 | position: absolute; 11 | top: 150px; 12 | width: 100%; 13 | height: 100px; 14 | } 15 | .devicetip-html-body{overflow-y: hidden !important;} 16 | -------------------------------------------------------------------------------- /client/tips/addPost.css: -------------------------------------------------------------------------------- 1 | ._tips_addPost_page{background-color: #fff; border-radius: 20px; padding: 20px 10px; margin: 10%; transform: translateY(50%);} 2 | ._tips_addPost_page img{width: 100%;} 3 | ._tips_addPost_page .title{font-size: 24px; color: #00c4ff; text-align: center; padding-bottom: 10px;} 4 | ._tips_addPost_page .desc{font-size: 16px; text-align: center; color: #9e9e9e; padding-bottom: 10px;} 5 | ._tips_addPost_status{ text-align: center; margin: 0; padding: 0;} 6 | ._tips_addPost_status li{ width: 5px; height: 5px; border-radius: 50%; background-color: #707070; display: inline-block; margin: 0px 5px;} 7 | ._tips_addPost_status li.hover{background-color: #00c4ff;} -------------------------------------------------------------------------------- /client/tips/tips.css: -------------------------------------------------------------------------------- 1 | ._tips ._tips_mask{position: fixed; left: 0; right: 0; top: 0; bottom: 0; z-index: 99999998; background-color: #000; opacity: 0.6;} 2 | ._tips ._tips_body{position: fixed; left: 0; right: 0; top: 0; bottom: 0; z-index: 99999999;} 3 | ._tips ._tips_body ._tips_body_main{position: relative; width: 100%; height: 100%;} -------------------------------------------------------------------------------- /client/tips/tips.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/tips/tips.js: -------------------------------------------------------------------------------- 1 | var view = null; 2 | Tips = { 3 | show: function(template, showClose){ 4 | Tips.close(); 5 | if(localStorage.getItem('_tips_' + template)) 6 | return; 7 | 8 | view = Blaze.renderWithData(Template._tips, {view: template}, document.body); 9 | localStorage.setItem('_tips_' + template, true); 10 | }, 11 | close: function(){ 12 | if(view){ 13 | Blaze.remove(view); 14 | view = null; 15 | } 16 | }, 17 | isShow: function(){ 18 | return view != null; 19 | } 20 | }; -------------------------------------------------------------------------------- /client/user-checkout/confirm.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user-checkout/confirm.js: -------------------------------------------------------------------------------- 1 | var view = null; 2 | var callback = null; 3 | 4 | Template._user_checkout_confirm.open = function(text, cb){ 5 | view && Blaze.remove(view); 6 | view = null; 7 | callback = cb; 8 | view = Blaze.renderWithData(Template._user_checkout_confirm, {text: text}, document.body); 9 | } 10 | 11 | Template._user_checkout_confirm.events({ 12 | 'click ._user_checkout_confirm_mask': function(){ 13 | view && Blaze.remove(view); 14 | view = null; 15 | // callback && callback(false); 16 | }, 17 | 'click .no': function(){ 18 | view && Blaze.remove(view); 19 | view = null; 20 | callback && callback(false); 21 | }, 22 | 'click .yes': function(){ 23 | view && Blaze.remove(view); 24 | view = null; 25 | callback && callback(true); 26 | } 27 | }); -------------------------------------------------------------------------------- /client/user/bindGroupUser.less: -------------------------------------------------------------------------------- 1 | .bindUserPage{ 2 | min-height: 100%; 3 | background: #efefef; 4 | } -------------------------------------------------------------------------------- /client/user/dayTasks.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user/user.js: -------------------------------------------------------------------------------- 1 | 2 | Template.searchMyPosts.helpers({ 3 | items: function () { 4 | var postsSearchData = PostsSearch.getData({ 5 | transform: function(matchText, regExp) { 6 | return matchText 7 | }, 8 | sort: {createdAt: -1} 9 | }); 10 | if (PostsSearch.getStatus().loaded == true) { 11 | if (postsSearchData.length == 0) { 12 | Meteor.setTimeout (function(){ 13 | Session.set("searchLoading", false); 14 | Session.set("noSearchResult", true); 15 | },2000); 16 | } else { 17 | Session.set("showSearchStatus", false); 18 | Session.set("searchLoading", false); 19 | Session.set("noSearchResult", false); 20 | } 21 | } 22 | return postsSearchData; 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /client/wookmark/template.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /imports/ui/stylesheets/chatContent.less: -------------------------------------------------------------------------------- 1 | .chatContent{ 2 | .eachChat{ 3 | .waitRead{width: 18px; height: 18px; line-height: 18px; text-align: center; font-size: 10px; position: absolute; right: 10px; bottom: 13px;border-radius: 50%;background-color: #F43531;color:#fff;} 4 | } 5 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/chatGroups.less: -------------------------------------------------------------------------------- 1 | .chatGroups #wrapper{position:relative;-webkit-touch-callout: none;} 2 | .chatGroups #wrapper .eachViewer{ 3 | background-color: white; 4 | } 5 | .chatGroups #wrapper .icon{width: 50px;height: 50px;margin: 10px;border-radius: 6px;} 6 | .chatGroups #wrapper .fa-users{width: 50px;height: 50px; line-height: 50px; margin: 10px;border-radius: 6px; display: inline-block; text-align: center; background-color: #2196f3; color: #fff; font-size: 24px;} 7 | .chatGroups #wrapper .groupsName{color: black;} 8 | .chatGroups .line{ 9 | text-align:center; 10 | width: 100%; 11 | height: 1px; 12 | //padding: 5px 0px; 13 | } 14 | .chatGroups .line span{background: #333; width: 100%; height: 1px; display: block;} -------------------------------------------------------------------------------- /imports/ui/stylesheets/loadingpost.less: -------------------------------------------------------------------------------- 1 | .glyphicon-refresh-animate { 2 | -animation: spin .7s infinite linear; 3 | -webkit-animation: spin2 .7s infinite linear; 4 | } 5 | 6 | @-webkit-keyframes spin2 { 7 | from { -webkit-transform: rotate(0deg);} 8 | to { -webkit-transform: rotate(360deg);} 9 | } 10 | 11 | @keyframes spin { 12 | from { transform: scale(1) rotate(0deg);} 13 | to { transform: scale(1) rotate(360deg);} 14 | } 15 | 16 | .showPosts .content .loading { 17 | height: 0px; 18 | position: absolute; 19 | top:0; 20 | bottom: 0; 21 | left: 0; 22 | right: 0; 23 | 24 | margin: auto; 25 | text-align: center; 26 | i{ 27 | background-color: rgba(240,240,240,0); 28 | span{ 29 | color: #333; 30 | } 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/mainImagesList.less: -------------------------------------------------------------------------------- 1 | .mainImagesList{ 2 | display: none; 3 | background: #fff; 4 | .content{ 5 | .mainImageListUl{ 6 | position: relative; 7 | width: 99%; 8 | margin: auto; 9 | top: 45px; 10 | padding: 0; 11 | li{ 12 | position: relative; 13 | width: 31%; 14 | height: 100px; 15 | background-repeat: no-repeat; 16 | background-size: cover; 17 | display: inline-block; 18 | margin: 2px; 19 | .mainImageListInput{ 20 | position: absolute; 21 | right: 5px; 22 | zoom:2; 23 | } 24 | } 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/messageDialogInfo.less: -------------------------------------------------------------------------------- 1 | .messageDialogInfo{ 2 | background-color: #EFEFF4; margin-bottom: -20px; 3 | .set-up{ 4 | .users{ 5 | .item{ 6 | width: 60px;height: 80px; display: inline-block;margin: 5px;position: relative; 7 | img{width: 60px; height: 60px; border-radius: 5px; margin-bottom:3px;} 8 | span{display: block;width: 100%; text-align: center;} 9 | .add{ 10 | width: 60px; height: 60px; text-align: center;border:1px solid #D9D9D9;border-radius: 5px; 11 | i{font-size: 40px;height: 60px; line-height: 60px;color: #D9D9D9;} 12 | } 13 | } 14 | } 15 | } 16 | .buttons{ 17 | margin-top: -20px; padding: 0px 10px; 18 | button{width: 100%;} 19 | } 20 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/messageGroup.less: -------------------------------------------------------------------------------- 1 | .messageGroupCreateName{ 2 | margin-top: -10px; 3 | .head{ 4 | position: relative; text-align: center; color: #fff; font-weight: bold; margin-bottom: 10px; 5 | .left-btn{position: absolute; left: 10px; top: 0px;color: #fff;font-weight: normal;} 6 | .right-btn{ 7 | position: absolute; right: 10px; top: 0px;color: #04BE02;font-weight: normal; 8 | i{color: #fff;} 9 | } 10 | } 11 | form{ 12 | padding: 0px 10px; 13 | input{} 14 | } 15 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/newPostsMsg.less: -------------------------------------------------------------------------------- 1 | .new-posts-msg{ 2 | padding-top: 40px; 3 | ul,li{margin: 0; padding: 0;} 4 | ul{padding: 0px 10px;} 5 | li{ 6 | padding: 10px 0px; position: relative; padding-left: 60px; padding-right: 40px; box-sizing: border-box; border-top: 1px solid #ccc; 7 | .icon{ 8 | width: 45px; height: 48px; position: absolute; left: 0px; top: 15px; 9 | img{width: 100%; height: 100%; border-radius: 5px;} 10 | } 11 | .name,.time{color: gray;} 12 | .time{ 13 | margin-top: 10px; font-size: 14px; 14 | i{padding-right: 5px;} 15 | } 16 | .text{font-size: 16px; color: gray;} 17 | .more{width: 14px; height: 14px; line-height: 14px; position: absolute; right: 10px; top: 50%; margin-top: -7px; color: gray;} 18 | } 19 | li:first-child{border-top: none;} 20 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/padding.less: -------------------------------------------------------------------------------- 1 | .padding-overlay{ 2 | height: 0; 3 | width: 0; 4 | } 5 | .padding { 6 | font-size: 25px; 7 | position: relative; 8 | display: inline-block; 9 | width: 1em; 10 | height: 1em; 11 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/postNotFound.less: -------------------------------------------------------------------------------- 1 | .showPosts .content .loading { 2 | .banner-img{ 3 | background-image: url("/reviewing.png"); 4 | height: 25%; 5 | width: 100%; 6 | background-repeat: no-repeat; 7 | margin: auto; 8 | background-position-x: center; 9 | background-size: auto 100%; 10 | position: relative; 11 | margin-bottom: 20px; 12 | } 13 | p{ 14 | color: grey; 15 | } 16 | } 17 | .showPosts .content .empty { 18 | min-height: 100%; 19 | height: 100%; 20 | position: absolute; 21 | top:0; 22 | bottom: 0; 23 | left: 0; 24 | right: 0; 25 | background-color: #111; 26 | margin: auto; 27 | text-align: center; 28 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/progressBar.less: -------------------------------------------------------------------------------- 1 | .progressBarBg {position: fixed;top: 0;background-color: #fff;bottom: 0;left: 0;right: 0;z-index: 999999999999;} 2 | .progressBar { 3 | position:absolute; 4 | left: 5%; 5 | width:90%; 6 | height:50%; 7 | top:45%; 8 | .progress{ 9 | height: 10%; 10 | font-size: 100%; 11 | } 12 | .btnDelayPublish{ 13 | width:100%; 14 | position:absolute; 15 | bottom:20px; 16 | } 17 | } -------------------------------------------------------------------------------- /imports/ui/stylesheets/thanksReport.less: -------------------------------------------------------------------------------- 1 | .thanksReport{ 2 | background-color:white; 3 | overflow-x: hidden; 4 | .content{ 5 | overflow-y: auto; 6 | background-color:#fbfbfb; 7 | color: #333; 8 | border-radius: 0px; 9 | position: absolute; 10 | bottom: 0px; 11 | top: 0px; 12 | width: 100%; 13 | padding-top: 100px; 14 | padding-bottom:30px; 15 | #title{ 16 | font-size: 18px; 17 | font-weight:bold; 18 | color:#000000; 19 | text-align: center; 20 | } 21 | #comment{ 22 | position: absolute; 23 | left:5%; 24 | right: 5%; 25 | color:#000000; 26 | background-color:#ffffff; 27 | width:90%; 28 | height:180px; 29 | margin-top: 30px; 30 | margin-bottom:30px; 31 | border-color: #f0f0f0; 32 | border-radius:6px; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /imports/ui/stylesheets/unpublish.less: -------------------------------------------------------------------------------- 1 | .templateunpublish{ 2 | position: relative; 3 | height: 100%; 4 | padding-top: 40px; 5 | padding-bottom: 30px; 6 | .content{ 7 | padding-top: 40%; 8 | color: grey; 9 | position: relative; 10 | height: 100%; 11 | .banner-img{ 12 | background-image: url("/delete.png"); 13 | height: 25%; 14 | width: 100%; 15 | background-repeat: no-repeat; 16 | margin: auto; 17 | background-position-x: center; 18 | background-size: auto 100%; 19 | margin-bottom: 20px; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /lib: -------------------------------------------------------------------------------- 1 | ../SharpAIMobileApp/lib -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests/mocha/post-test", 4 | "chimp-test": "chimp --mocha --path=tests/mocha", 5 | "chimp-post-watch": "chimp --ddp=http://localhost:7788 --mocha --browser=firefox --path=tests/mocha/post-watch" 6 | }, 7 | "dependencies": { 8 | "async": "^2.1.5", 9 | "eventie": "^1.0.6", 10 | "jquery": "^3.5.1", 11 | "wolfy87-eventemitter": "^5.2.9" 12 | }, 13 | "devDependencies": { 14 | "eslint": "^5.16.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages.json: -------------------------------------------------------------------------------- 1 | { 2 | "jssha" : "2.0.1", 3 | "jpush-sdk" : "3.1.0", 4 | "seedrandom" : "2.3.11", 5 | "request": "2.74.0", 6 | "slackbots": "0.5.2", 7 | "nodemailer": "2.5.0", 8 | "aliyun-sdk": "1.9.6", 9 | "aliyun-cdi": "0.1.4", 10 | "html-minifier": "3.1.0", 11 | "frkskyweb":"0.2.1", 12 | "fibers": "1.0.15", 13 | "qr-image": "3.2.0" 14 | } 15 | -------------------------------------------------------------------------------- /packages/.gitignore: -------------------------------------------------------------------------------- 1 | .build* 2 | -------------------------------------------------------------------------------- /packages/.npm/package/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /packages/.npm/package/README: -------------------------------------------------------------------------------- 1 | This directory and the files immediately inside it are automatically generated 2 | when you change this package's NPM dependencies. Commit the files in this 3 | directory (npm-shrinkwrap.json, .gitignore, and this README) to source control 4 | so that others run the same versions of sub-dependencies. 5 | 6 | You should NOT check in the node_modules directory that Meteor automatically 7 | creates; if you are using git, the .gitignore file tells git to ignore it. 8 | -------------------------------------------------------------------------------- /packages/.npm/package/npm-shrinkwrap.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "apn": { 4 | "version": "1.4.2", 5 | "dependencies": { 6 | "q": { 7 | "version": "0.9.7" 8 | } 9 | } 10 | }, 11 | "node-gcm": { 12 | "version": "0.9.6" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/accounts-base/.gitignore: -------------------------------------------------------------------------------- 1 | .build* 2 | -------------------------------------------------------------------------------- /packages/accounts-base/README.md: -------------------------------------------------------------------------------- 1 | # accounts-base 2 | 3 | Meteor's user account system. This package implements the basic functions necessary for user accounts and lets other packages register login services. Some of these services are in the following packages: 4 | 5 | - `accounts-password` 6 | - `accounts-facebook` 7 | - `accounts-google` 8 | - `accounts-github` 9 | - `accounts-twitter` 10 | - `accounts-meetup` 11 | - `accounts-weibo` 12 | 13 | There are also login services available in community packages. 14 | 15 | For more information, see the [Meteor docs](http://docs.meteor.com/#accounts_api) and the Meteor Accounts [project page](https://www.meteor.com/accounts). 16 | -------------------------------------------------------------------------------- /packages/accounts-base/client_tests.js: -------------------------------------------------------------------------------- 1 | import "./accounts_url_tests.js"; 2 | import "./accounts_reconnect_tests.js"; 3 | -------------------------------------------------------------------------------- /packages/accounts-base/server_tests.js: -------------------------------------------------------------------------------- 1 | import "./accounts_tests.js"; 2 | import "./accounts_reconnect_tests.js"; 3 | -------------------------------------------------------------------------------- /packages/accounts-base/url_server.js: -------------------------------------------------------------------------------- 1 | import {AccountsServer} from "./accounts_server.js"; 2 | 3 | // XXX These should probably not actually be public? 4 | 5 | AccountsServer.prototype.urls = { 6 | resetPassword: function (token) { 7 | return Meteor.absoluteUrl('#/reset-password/' + token); 8 | }, 9 | 10 | verifyEmail: function (token) { 11 | return Meteor.absoluteUrl('#/verify-email/' + token); 12 | }, 13 | 14 | enrollAccount: function (token) { 15 | return Meteor.absoluteUrl('#/enroll-account/' + token); 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /packages/autoupdate/.gitignore: -------------------------------------------------------------------------------- 1 | .build* 2 | -------------------------------------------------------------------------------- /packages/autoupdate/README.md: -------------------------------------------------------------------------------- 1 | # autoupdate 2 | 3 | This package is the heart of Meteor's Hot Code Push functionality. It has a 4 | client component and a server component component. The client component uses a 5 | DDP API provided by the server to subscribe to the version ID of the most recent 6 | build of the app's client. When it sees that a new version is available, it uses 7 | the [reload](https://atmospherejs.com/meteor/reload) package (if included in the 8 | app) to gracefully save the app's state and reload it in place. 9 | 10 | `autoupdate` is part of the [Webapp](https://www.meteor.com/webapp) 11 | project. 12 | -------------------------------------------------------------------------------- /packages/autoupdate/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | summary: "Update the client when new client code is available", 3 | version: '1.3.11' 4 | }); 5 | 6 | Package.onUse(function (api) { 7 | api.use([ 8 | 'webapp', 9 | 'check' 10 | ], 'server'); 11 | 12 | api.use([ 13 | 'tracker', 14 | 'retry' 15 | ], 'client'); 16 | 17 | api.use([ 18 | 'ddp', 19 | 'mongo', 20 | 'underscore' 21 | ], ['client', 'server']); 22 | 23 | api.use(['http', 'random'], 'web.cordova'); 24 | 25 | api.addFiles('autoupdate_server.js', 'server'); 26 | api.addFiles('autoupdate_client.js', 'web.browser'); 27 | api.addFiles('autoupdate_cordova.js', 'web.cordova'); 28 | 29 | api.export('Autoupdate'); 30 | }); 31 | -------------------------------------------------------------------------------- /packages/echarts/README.md: -------------------------------------------------------------------------------- 1 | Please go to [http://echarts.baidu.com/tutorial.html](http://echarts.baidu.com/tutorial.html) -------------------------------------------------------------------------------- /packages/echarts/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'sraita:echarts', 3 | version: '0.0.1', 4 | // Brief, one-line summary of the package. 5 | summary: 'Use echarts with meteor.', 6 | // URL to the Git repository containing the source code for this package. 7 | git: 'https://github.com/iEverX/meteor-echarts', 8 | // By default, Meteor will default to using README.md for documentation. 9 | // To avoid submitting documentation, set this field to null. 10 | documentation: 'README.md' 11 | }); 12 | 13 | Package.onUse(function(api) { 14 | api.versionsFrom('1.2.1'); 15 | api.addFiles('echarts.min.js', 'client', {bare:true}); 16 | }); -------------------------------------------------------------------------------- /packages/fast-render/.gitignore: -------------------------------------------------------------------------------- 1 | .tmp-qa 2 | .build* 3 | .npm 4 | test/packages/fast-render 5 | versions.json 6 | -------------------------------------------------------------------------------- /packages/fast-render/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | before_install: 5 | - "curl -L http://git.io/ejPSng | /bin/sh" -------------------------------------------------------------------------------- /packages/fast-render/lib/client/boot.js: -------------------------------------------------------------------------------- 1 | InjectData.getData('fast-render-data', function(payload) { 2 | FastRender.init(payload); 3 | }); -------------------------------------------------------------------------------- /packages/fast-render/lib/client/id_tools.js: -------------------------------------------------------------------------------- 1 | IDTools = {}; 2 | IDTools.idParse = LocalCollection._idParse; 3 | IDTools.idStringify = LocalCollection._idStringify; 4 | IDTools.ObjectID = LocalCollection._ObjectID 5 | 6 | // To support Meteor 1.2 7 | if(Package['mongo-id']) { 8 | var MongoID = Package['mongo-id'].MongoID; 9 | IDTools.idParse = MongoID.idParse; 10 | IDTools.idStringify = MongoID.idStringify; 11 | IDTools.ObjectID = MongoID.ObjectID; 12 | } -------------------------------------------------------------------------------- /packages/fast-render/lib/server/namespace.js: -------------------------------------------------------------------------------- 1 | FastRender = { 2 | _routes: [], 3 | _onAllRoutes: [] 4 | }; -------------------------------------------------------------------------------- /packages/fast-render/tests/utils.js: -------------------------------------------------------------------------------- 1 | bufferedWritesInterval = 5; 2 | 3 | Tinytest.add('AddedToChanged - new fields', function(test) { 4 | var localCopy = {aa: 10}; 5 | var added = {fields: {aa: 20, bb: 20}, msg: 'added'}; 6 | 7 | AddedToChanged(localCopy, added); 8 | 9 | test.equal(added.msg, 'changed'); 10 | test.equal(added.fields, {aa: 20, bb: 20}); 11 | }); 12 | 13 | Tinytest.add('AddedToChanged - removed fields', function(test) { 14 | var localCopy = {aa: 10, cc: 20, bb: 10}; 15 | var added = {fields: {bb: 20}, msg: 'added'}; 16 | 17 | AddedToChanged(localCopy, added); 18 | 19 | test.equal(added.msg, 'changed'); 20 | test.equal(added.fields, {bb: 20}); 21 | test.equal(added.cleared, ['aa', 'cc']); 22 | }); -------------------------------------------------------------------------------- /packages/fast-render/todo.md: -------------------------------------------------------------------------------- 1 | * use better version of updated without usign deepExtend 2 | * remove client side IR stuff 3 | * use DDP level document replacement 4 | * simply add null subscriptions data to when getting them 5 | * support with new IR to detect docs on the server 6 | * move docs to github 7 | * add tests in mini-mongo -------------------------------------------------------------------------------- /packages/inject-data/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ### v2.0.0 4 | 2016-Feb-19 5 | 6 | * Override individual res objects instead of overriding the prototype. This is a fix to support Meteor 1.3, which gave us the gzipped version of the html. 7 | * Because of that we had to change the API a bit on the server. See: 8 | - `res.pushData('key', {data: 'here'})` => `InjectData.pushData(res, 'key', {data: 'here'})` 9 | - `res.getData('key')` => `InjectData.getData(res, 'key')` 10 | 11 | ### v1.4.1 12 | * Use `EJSON.parse()`. See: [#4](https://github.com/meteorhacks/inject-data/pull/4) 13 | 14 | ### v1.4.0 15 | 16 | * Add support for SSR by prepending the html on top of the first script tag 17 | 18 | ### v1.3.0 19 | 20 | * Add IE8 Compatibility 21 | -------------------------------------------------------------------------------- /packages/inject-data/lib/client.js: -------------------------------------------------------------------------------- 1 | Meteor.startup(function() { 2 | var dom = $('script[type="text/inject-data"]', document); 3 | var injectedDataString = $.trim(dom.text()); 4 | InjectData._data = InjectData._decode(injectedDataString) || {}; 5 | }); 6 | 7 | InjectData.getData = function(key, callback) { 8 | Meteor.startup(function() { 9 | callback(InjectData._data[key]); 10 | }); 11 | }; -------------------------------------------------------------------------------- /packages/inject-data/lib/inject.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/inject-data/lib/namespace.js: -------------------------------------------------------------------------------- 1 | InjectData = {}; -------------------------------------------------------------------------------- /packages/inject-data/lib/utils.js: -------------------------------------------------------------------------------- 1 | InjectData._encode = function(ejson) { 2 | var ejsonString = EJSON.stringify(ejson); 3 | return encodeURIComponent(ejsonString); 4 | }; 5 | 6 | InjectData._decode = function(encodedEjson) { 7 | var decodedEjsonString = decodeURIComponent(encodedEjson); 8 | if(!decodedEjsonString) return null; 9 | 10 | return EJSON.parse(decodedEjsonString); 11 | }; 12 | -------------------------------------------------------------------------------- /packages/inject-data/tests/client.js: -------------------------------------------------------------------------------- 1 | Tinytest.addAsync('Clinet - get data', function(test, done) { 2 | InjectData.getData('hello', function(data) { 3 | test.equal(data, {meteorhacks: "rocks"}); 4 | done(); 5 | }); 6 | }); -------------------------------------------------------------------------------- /packages/inject-data/tests/init.js: -------------------------------------------------------------------------------- 1 | Picker.route('/', function(params, req, res, next) { 2 | InjectData.pushData(res, "hello", {meteorhacks: "rocks"}); 3 | next(); 4 | }); 5 | -------------------------------------------------------------------------------- /packages/inject-data/tests/utils.js: -------------------------------------------------------------------------------- 1 | Tinytest.add('Utils - encode decode', function(test) { 2 | var data = {aa: 10, date: new Date()}; 3 | var str = InjectData._encode(data); 4 | var decoded = InjectData._decode(str); 5 | 6 | test.equal(decoded.aa, data.aa); 7 | test.equal(decoded.date.getTime(), data.date.getTime()); 8 | }); 9 | 10 | Tinytest.add('Utils - decode empty', function(test) { 11 | var str = "" 12 | var decoded = InjectData._decode(str); 13 | test.equal(decoded, null); 14 | }); 15 | 16 | Tinytest.add('Utils - encode decode special chars', function(test) { 17 | var data = {special: "#://"}; 18 | var str = InjectData._encode(data); 19 | 20 | test.isFalse(/#/.test(str)); 21 | }); -------------------------------------------------------------------------------- /packages/meteor-mqtt/.npm/package/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /packages/meteor-mqtt/.npm/package/README: -------------------------------------------------------------------------------- 1 | This directory and the files immediately inside it are automatically generated 2 | when you change this package's NPM dependencies. Commit the files in this 3 | directory (npm-shrinkwrap.json, .gitignore, and this README) to source control 4 | so that others run the same versions of sub-dependencies. 5 | 6 | You should NOT check in the node_modules directory that Meteor automatically 7 | creates; if you are using git, the .gitignore file tells git to ignore it. 8 | -------------------------------------------------------------------------------- /packages/meteor-mqtt/README.md: -------------------------------------------------------------------------------- 1 | 2 | Meteor package for MQTT.js npm module. 3 | 4 | MQTT.js mqtt client package with both server and client API's working. 5 | 6 | Basic Usage: 7 | 8 | var mqtt = require('mqtt'); 9 | var client = mqtt.connect('mqtt://test.mosquitto.org'); 10 | 11 | client.subscribe('presence'); 12 | client.publish('presence', 'Hello mqtt'); 13 | 14 | client.on('message', function (topic, message) { 15 | // message is Buffer 16 | console.log(message.toString()); 17 | }); 18 | 19 | client.end(); 20 | 21 | See: http://www.modern-industry.com/admin/Article/17-using-mqtt-with-meteor for an article on 22 | how to use with Meteor. 23 | 24 | See: http://www.thingstud.io for a cloud service to create UI's for MQTT 25 | 26 | See: https://www.npmjs.com/package/mqtt for full API 27 | 28 | 29 | -------------------------------------------------------------------------------- /packages/meteor-mqtt/client.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/meteor-mqtt/mqtt-tests.js: -------------------------------------------------------------------------------- 1 | // Write your tests here! 2 | // Here is an example. 3 | Tinytest.add('example', function (test) { 4 | test.equal(true, true); 5 | }); 6 | -------------------------------------------------------------------------------- /packages/meteor-mqtt/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'mkarliner:mqtt', 3 | version: '0.2.0', 4 | summary: 'Connect Meteor to MQTT message broker', 5 | git: 'http://www.github.com/mkarliner/meteor-mqtt', 6 | documentation: 'README.md' 7 | }); 8 | 9 | Npm.depends({ 10 | "mqtt": "2.9.0" 11 | }) 12 | 13 | Package.onUse(function(api) { 14 | api.export("mqtt", "server"); 15 | api.versionsFrom('1.0.3.1'); 16 | api.addFiles('server.js', ["server"]); 17 | }); 18 | 19 | Package.onTest(function(api) { 20 | api.use('tinytest'); 21 | api.use('mkarliner:mqtt'); 22 | api.addFiles('mqtt-tests.js'); 23 | }); 24 | -------------------------------------------------------------------------------- /packages/meteor-phonegap-push/.gitignore: -------------------------------------------------------------------------------- 1 | .build* 2 | -------------------------------------------------------------------------------- /packages/meteor-phonegap-push/.npm/package/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /packages/meteor-phonegap-push/.npm/package/README: -------------------------------------------------------------------------------- 1 | This directory and the files immediately inside it are automatically generated 2 | when you change this package's NPM dependencies. Commit the files in this 3 | directory (npm-shrinkwrap.json, .gitignore, and this README) to source control 4 | so that others run the same versions of sub-dependencies. 5 | 6 | You should NOT check in the node_modules directory that Meteor automatically 7 | creates; if you are using git, the .gitignore file tells git to ignore it. 8 | -------------------------------------------------------------------------------- /packages/meteor-phonegap-push/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | version: '0.0.1', 3 | summary: "" 4 | }); 5 | 6 | Package.describe({ 7 | summary: "Meteor push server for IOS and android" 8 | }); 9 | 10 | 11 | // Server-side push deps 12 | Npm.depends({ 13 | 'apn' : '1.6.2', // 1.6.2 14 | //'debug': '0.7.3', // DEBUG 15 | 'node-gcm' : '0.9.15' // 0.9.15 16 | }); 17 | 18 | 19 | Package.on_use(function (api) { 20 | 21 | api.add_files([ 22 | 'android.server.js', 23 | 'ios.server.js', 24 | 'push.server.js' 25 | ], 'server'); 26 | api.export && api.export('CordovaPush', 'server'); 27 | }); 28 | 29 | 30 | -------------------------------------------------------------------------------- /packages/meteor-phonegap-push/versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | [ 4 | "meteor", 5 | "1.1.3" 6 | ], 7 | [ 8 | "underscore", 9 | "1.0.1" 10 | ] 11 | ], 12 | "pluginDependencies": [], 13 | "toolVersion": "meteor-tool@1.0.36", 14 | "format": "1.0" 15 | } -------------------------------------------------------------------------------- /packages/meteor-swipe/.gitignore: -------------------------------------------------------------------------------- 1 | .build* 2 | *.DS_Store 3 | -------------------------------------------------------------------------------- /packages/meteor-swipe/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | version: '0.0.10', 3 | summary: 'A package for creating apps that swipe between pages', 4 | }); 5 | 6 | Package.onUse(function(api) { 7 | api.versionsFrom('1.0'); 8 | 9 | api.use(['templating', 'coffeescript'], 'client') 10 | 11 | api.addFiles(['swipe/swipe.html', 'swipe/swipe.coffee', 'swipe/swipe.css'], 'client'); 12 | 13 | api.export('Swipe', ['client']) 14 | 15 | }); 16 | 17 | // Package.onTest(function(api) { 18 | // api.use('tinytest'); 19 | // api.use('ccorcos:swipe'); 20 | // api.addFiles('ccorcos:swipe-tests.js'); 21 | // }); 22 | -------------------------------------------------------------------------------- /packages/meteor-swipe/swipe/swipe.html: -------------------------------------------------------------------------------- 1 | 2 | 13 | -------------------------------------------------------------------------------- /packages/npm-container/.npm/package/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /packages/npm-container/.npm/package/README: -------------------------------------------------------------------------------- 1 | This directory and the files immediately inside it are automatically generated 2 | when you change this package's NPM dependencies. Commit the files in this 3 | directory (npm-shrinkwrap.json, .gitignore, and this README) to source control 4 | so that others run the same versions of sub-dependencies. 5 | 6 | You should NOT check in the node_modules directory that Meteor automatically 7 | creates; if you are using git, the .gitignore file tells git to ignore it. 8 | -------------------------------------------------------------------------------- /packages/npm-container/index.js: -------------------------------------------------------------------------------- 1 | Meteor.npmRequire = function(moduleName) { 2 | var module = Npm.require(moduleName); 3 | return module; 4 | }; 5 | 6 | Meteor.require = function(moduleName) { 7 | console.warn('Meteor.require is deprecated. Please use Meteor.npmRequire instead!'); 8 | return Meteor.npmRequire(moduleName); 9 | }; -------------------------------------------------------------------------------- /packages/simple-chat/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SharpAI/ApiServer/a3676a06f52ea02a599a8d4cf3cc24d0dae07c65/packages/simple-chat/.DS_Store -------------------------------------------------------------------------------- /packages/simple-chat/client/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SharpAI/ApiServer/a3676a06f52ea02a599a8d4cf3cc24d0dae07c65/packages/simple-chat/client/.DS_Store -------------------------------------------------------------------------------- /packages/simple-chat/client/lib/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SharpAI/ApiServer/a3676a06f52ea02a599a8d4cf3cc24d0dae07c65/packages/simple-chat/client/lib/.DS_Store -------------------------------------------------------------------------------- /packages/simple-chat/client/lib/crypto1/cbc/cbc-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Crypto-JS v1.1.0 3 | * http://code.google.com/p/crypto-js/ 4 | * Copyright (c) 2009, Jeff Mott. All rights reserved. 5 | * http://code.google.com/p/crypto-js/wiki/License 6 | */ 7 | Crypto.mode.CBC={encrypt:function(b,a,c){var f=b._blocksize*4;a.push(128);for(var e=0;eg._blocksize*4?g(f,{asBytes:true}):a.stringToBytes(f);var c=f,j=f.slice(0);for(var e=0;e