| | |
| | | const g = typeof global !== 'undefined' ? global : self; |
| | | g.appXAppJson = { |
| | | "app": { |
| | | "$homepage": "pages/sponsor-signup/sponsor-signup" |
| | | "$homepage": "pages/rewards/rewards", |
| | | "useDynamicPlugins": true |
| | | } |
| | | }; |
| | |
| | | require('@alipay/appx-compiler/lib/sjsEnvInit'); |
| | | require('./config$'); |
| | | |
| | | require('../../node_modules/mini-ali-ui/es/loading/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../app'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/flex-item/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/loading/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/button/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/modal/index?hash=febd4c40992222524e0db12a74760a28f8f9b339'); |
| | | require('../../node_modules/mini-ali-ui/es/notice/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../node_modules/miniapp-bc-user/es/bc-module/bc-module?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | | require('../../node_modules/mini-ali-ui/es/badge/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/mask/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/popover/index?hash=6d8aebee62dceaacd4af71bcf2a181cfc15220af'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/grid/index?hash=45fe1418d25fc81c09eccb62e0568b7faa62b362'); |
| | | require('../../node_modules/circle-statistic-view/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-switch/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=20dde489a4061a5579b2889ba2acc7e23b779522'); |
| | | require('../../pages/advice/advice?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/scan-record/scan-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/rewards/rewards?hash=95ab0ede16cb1ad22ed1404bf4fb0e0873afc706'); |
| | | require('../../pages/goods/goods?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/mine/mine?hash=d479ca49a8aaa25923410044915915eb0ba6fb67'); |
| | | require('../../pages/canvas/canvas?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/activity-detail/activity-detail?hash=768e06c932dc70ff05ac6183e0331c45776096ba'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/join-statistic/join-statistic?hash=f91084abb9cc4d6a1ab7c5f7212504dbfa35116b'); |
| | | require('../../pages/assist-process/assist-process?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/web/web?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/msg-record/msg-record?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/assist-friends/assist-friends?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/msg-setting/msg-setting?hash=bae612b4ae5b5e7f34a588a703442c2a3d9b953c'); |
| | | require('../../pages/lucky-record/lucky-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/template/template?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/scan-record/scan-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../pages/rewards/rewards?hash=b775c3299edccea71cc1989ff381088e71b0228f'); |
| | | require('../../pages/goods/goods?hash=65adadcff52b81aaf77252ac60c693ec449caef8'); |
| | | require('../../pages/mine/mine?hash=c3c7d3e16a646c4450b2732f1bcd56c7f32630ff'); |
| | | require('../../pages/canvas/canvas?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/activity-detail/activity-detail?hash=3ff7dd30a3ea0de70909d48b0b8ce5bda62ef62e'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/join-statistic/join-statistic?hash=96494a69a77c04a2a41944933b5875740b0d9262'); |
| | | require('../../pages/assist-process/assist-process?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/web/web?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/msg-record/msg-record?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/assist-friends/assist-friends?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/msg-setting/msg-setting?hash=5f504890acbcf3bad0486fc198ac7448dd406718'); |
| | | require('../../pages/lucky-record/lucky-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/template/template?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=dc20ef8880ff4618d424be68cf5d01d8a2b6ee52'); |
| | | require('../../pages/advice/advice?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | |
| | | |
| | | function success() { |
| | | require('../../app'); |
| | | require('../../node_modules/mini-ali-ui/es/loading/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/flex-item/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/loading/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/button/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/modal/index?hash=febd4c40992222524e0db12a74760a28f8f9b339'); |
| | | require('../../node_modules/mini-ali-ui/es/notice/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../node_modules/miniapp-bc-user/es/bc-module/bc-module?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | | require('../../node_modules/mini-ali-ui/es/badge/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/mask/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/popover/index?hash=6d8aebee62dceaacd4af71bcf2a181cfc15220af'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/grid/index?hash=45fe1418d25fc81c09eccb62e0568b7faa62b362'); |
| | | require('../../node_modules/circle-statistic-view/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-switch/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=20dde489a4061a5579b2889ba2acc7e23b779522'); |
| | | require('../../pages/advice/advice?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/scan-record/scan-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/rewards/rewards?hash=95ab0ede16cb1ad22ed1404bf4fb0e0873afc706'); |
| | | require('../../pages/goods/goods?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/mine/mine?hash=d479ca49a8aaa25923410044915915eb0ba6fb67'); |
| | | require('../../pages/canvas/canvas?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/activity-detail/activity-detail?hash=768e06c932dc70ff05ac6183e0331c45776096ba'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/join-statistic/join-statistic?hash=f91084abb9cc4d6a1ab7c5f7212504dbfa35116b'); |
| | | require('../../pages/assist-process/assist-process?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/web/web?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/msg-record/msg-record?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/assist-friends/assist-friends?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/msg-setting/msg-setting?hash=bae612b4ae5b5e7f34a588a703442c2a3d9b953c'); |
| | | require('../../pages/lucky-record/lucky-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/template/template?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/scan-record/scan-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../pages/rewards/rewards?hash=b775c3299edccea71cc1989ff381088e71b0228f'); |
| | | require('../../pages/goods/goods?hash=65adadcff52b81aaf77252ac60c693ec449caef8'); |
| | | require('../../pages/mine/mine?hash=c3c7d3e16a646c4450b2732f1bcd56c7f32630ff'); |
| | | require('../../pages/canvas/canvas?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/activity-detail/activity-detail?hash=3ff7dd30a3ea0de70909d48b0b8ce5bda62ef62e'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/join-statistic/join-statistic?hash=96494a69a77c04a2a41944933b5875740b0d9262'); |
| | | require('../../pages/assist-process/assist-process?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/web/web?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/msg-record/msg-record?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/assist-friends/assist-friends?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/msg-setting/msg-setting?hash=5f504890acbcf3bad0486fc198ac7448dd406718'); |
| | | require('../../pages/lucky-record/lucky-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/template/template?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=dc20ef8880ff4618d424be68cf5d01d8a2b6ee52'); |
| | | require('../../pages/advice/advice?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | } |
| | | self.bootstrapApp ? self.bootstrapApp({ success }) : success(); |
| | | } |
| | |
| | | const g = typeof global !== 'undefined' ? global : self; |
| | | g.appXAppJson = { |
| | | "app": { |
| | | "$homepage": "pages/rewards/rewards" |
| | | "$homepage": "pages/rewards/rewards", |
| | | "useDynamicPlugins": true |
| | | } |
| | | }; |
| | |
| | | require('@alipay/appx-compiler/lib/sjsEnvInit'); |
| | | require('./config$'); |
| | | |
| | | require('../../app'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/flex/flex-item/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/loading/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/modal/index?hash=febd4c40992222524e0db12a74760a28f8f9b339'); |
| | | require('../../node_modules/mini-ali-ui/es/notice/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../node_modules/miniapp-bc-user/es/bc-module/bc-module?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/grid/index?hash=45fe1418d25fc81c09eccb62e0568b7faa62b362'); |
| | | require('../../node_modules/circle-statistic-view/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-switch/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../pages/rewards/rewards?hash=95ab0ede16cb1ad22ed1404bf4fb0e0873afc706'); |
| | | require('../../pages/goods/goods?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/mine/mine?hash=d479ca49a8aaa25923410044915915eb0ba6fb67'); |
| | | require('../../pages/canvas/canvas?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/activity-detail/activity-detail?hash=768e06c932dc70ff05ac6183e0331c45776096ba'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/join-statistic/join-statistic?hash=f91084abb9cc4d6a1ab7c5f7212504dbfa35116b'); |
| | | require('../../pages/assist-process/assist-process?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/web/web?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/msg-record/msg-record?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/assist-friends/assist-friends?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/msg-setting/msg-setting?hash=bae612b4ae5b5e7f34a588a703442c2a3d9b953c'); |
| | | require('../../pages/lucky-record/lucky-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/template/template?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../pages/rewards/rewards?hash=b775c3299edccea71cc1989ff381088e71b0228f'); |
| | | require('../../pages/goods/goods?hash=65adadcff52b81aaf77252ac60c693ec449caef8'); |
| | | require('../../pages/mine/mine?hash=c3c7d3e16a646c4450b2732f1bcd56c7f32630ff'); |
| | | require('../../pages/canvas/canvas?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/activity-detail/activity-detail?hash=3ff7dd30a3ea0de70909d48b0b8ce5bda62ef62e'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/join-statistic/join-statistic?hash=96494a69a77c04a2a41944933b5875740b0d9262'); |
| | | require('../../pages/assist-process/assist-process?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/web/web?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/msg-record/msg-record?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/assist-friends/assist-friends?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/msg-setting/msg-setting?hash=5f504890acbcf3bad0486fc198ac7448dd406718'); |
| | | require('../../pages/lucky-record/lucky-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/template/template?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=dc20ef8880ff4618d424be68cf5d01d8a2b6ee52'); |
| | | require('../../pages/advice/advice?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/am-icon/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/modal/index?hash=febd4c40992222524e0db12a74760a28f8f9b339'); |
| | | require('../../node_modules/mini-ali-ui/es/notice/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../node_modules/miniapp-bc-user/es/bc-module/bc-module?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/index?hash=e1617a0257fb9de746f60d50b03404ad924976c9'); |
| | | require('../../node_modules/mini-ali-ui/es/list/auto-size-img/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/list/list-item/index?hash=a5465b8c889360e3f854461d3ac41cf414aec633'); |
| | |
| | | require('../../node_modules/mini-ali-ui/es/grid/index?hash=45fe1418d25fc81c09eccb62e0568b7faa62b362'); |
| | | require('../../node_modules/circle-statistic-view/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../node_modules/mini-ali-ui/es/am-switch/index?hash=05d2a9730dd6009bf9446182f9c985f40f8c0f43'); |
| | | require('../../pages/rewards/rewards?hash=95ab0ede16cb1ad22ed1404bf4fb0e0873afc706'); |
| | | require('../../pages/goods/goods?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/mine/mine?hash=d479ca49a8aaa25923410044915915eb0ba6fb67'); |
| | | require('../../pages/canvas/canvas?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/activity-detail/activity-detail?hash=768e06c932dc70ff05ac6183e0331c45776096ba'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/join-statistic/join-statistic?hash=f91084abb9cc4d6a1ab7c5f7212504dbfa35116b'); |
| | | require('../../pages/assist-process/assist-process?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/web/web?hash=32d7d2807ed4e666ef03b4b3fe8c38ecf2e34e68'); |
| | | require('../../pages/msg-record/msg-record?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/assist-friends/assist-friends?hash=5d86f384244ee40ea6500a270a121b3c10155863'); |
| | | require('../../pages/msg-setting/msg-setting?hash=bae612b4ae5b5e7f34a588a703442c2a3d9b953c'); |
| | | require('../../pages/lucky-record/lucky-record?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../pages/template/template?hash=d2c2848db0818b7a65235ff7a4451e03796136b5'); |
| | | require('../../node_modules/mini-ali-ui/es/picker-item/index?hash=5a0c180d5ccf7c9d483dd4817cdab5489824013c'); |
| | | require('../../pages/rewards/rewards?hash=b775c3299edccea71cc1989ff381088e71b0228f'); |
| | | require('../../pages/goods/goods?hash=65adadcff52b81aaf77252ac60c693ec449caef8'); |
| | | require('../../pages/mine/mine?hash=c3c7d3e16a646c4450b2732f1bcd56c7f32630ff'); |
| | | require('../../pages/canvas/canvas?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/activity-detail/activity-detail?hash=3ff7dd30a3ea0de70909d48b0b8ce5bda62ef62e'); |
| | | require('../../pages/reward-announcement/reward-announcement?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/join-statistic/join-statistic?hash=96494a69a77c04a2a41944933b5875740b0d9262'); |
| | | require('../../pages/assist-process/assist-process?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/lucky-coupon/lucky-coupon?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/web/web?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/msg-record/msg-record?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/assist-friends/assist-friends?hash=59bab5c4a4a4ec930e168925c97c3057ac83fa7d'); |
| | | require('../../pages/msg-setting/msg-setting?hash=5f504890acbcf3bad0486fc198ac7448dd406718'); |
| | | require('../../pages/lucky-record/lucky-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/template/template?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | require('../../pages/sponsor-signup/sponsor-signup?hash=dc20ef8880ff4618d424be68cf5d01d8a2b6ee52'); |
| | | require('../../pages/advice/advice?hash=c38b953af6bdab8fe399141b33dd1ad1ceb7ea7f'); |
| | | require('../../pages/scan-record/scan-record?hash=c6818e0a77e4e2f8365cc6ed1a93960827e43474'); |
| | | } |
| | | self.bootstrapApp ? self.bootstrapApp({ success }) : success(); |
| | | } |
| | |
| | | var help = require('./util/help.js'); |
| | | App({ |
| | | themeColor:"#0080FF", |
| | | themeColor: "#0080FF", |
| | | appKey: '100001', |
| | | onLaunch(options) { |
| | | // 第一次打开 |
| | | // options.query == {number:1} |
| | | console.info('App onLaunch'); |
| | | my.hideFavoriteMenu(); |
| | | my.hideFavoriteMenu(); |
| | | }, |
| | | onShow(options) { |
| | | // 从后台被 scheme 重新打开 |
| | |
| | | { |
| | | "useDynamicPlugins": true, |
| | | "pages": [ |
| | | "pages/sponsor-signup/sponsor-signup", |
| | | "pages/advice/advice", |
| | | "pages/scan-record/scan-record", |
| | | "pages/rewards/rewards", |
| | | "pages/goods/goods", |
| | | "pages/mine/mine", |
| | |
| | | "pages/msg-setting/msg-setting", |
| | | "pages/lucky-record/lucky-record", |
| | | "pages/template/template", |
| | | "pages/scan-record/scan-record", |
| | | "pages/sponsor-signup/sponsor-signup", |
| | | "pages/advice/advice", |
| | | "pages/scan-record/scan-record" |
| | | ], |
| | | "window": { |
New file |
| | |
| | | Copyright (c) Felix Böhm |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: |
| | | |
| | | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. |
| | | |
| | | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. |
| | | |
| | | THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
New file |
| | |
| | | //Types of elements found in the DOM |
| | | module.exports = { |
| | | Text: "text", //Text |
| | | Directive: "directive", //<? ... ?> |
| | | Comment: "comment", //<!-- ... --> |
| | | Script: "script", //<script> tags |
| | | Style: "style", //<style> tags |
| | | Tag: "tag", //Any tag |
| | | CDATA: "cdata", //<![CDATA[ ... ]]> |
| | | Doctype: "doctype", |
| | | |
| | | isTag: function(elem){ |
| | | return elem.type === "tag" || elem.type === "script" || elem.type === "style"; |
| | | } |
| | | }; |
New file |
| | |
| | | { |
| | | "_from": "domelementtype@1", |
| | | "_id": "domelementtype@1.3.1", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", |
| | | "_location": "/domelementtype", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "range", |
| | | "registry": true, |
| | | "raw": "domelementtype@1", |
| | | "name": "domelementtype", |
| | | "escapedName": "domelementtype", |
| | | "rawSpec": "1", |
| | | "saveSpec": null, |
| | | "fetchSpec": "1" |
| | | }, |
| | | "_requiredBy": [ |
| | | "/domhandler" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", |
| | | "_shasum": "d048c44b37b0d10a7f2a3d5fee3f4333d790481f", |
| | | "_spec": "domelementtype@1", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky\\node_modules\\domhandler", |
| | | "author": { |
| | | "name": "Felix Boehm", |
| | | "email": "me@feedic.com" |
| | | }, |
| | | "bugs": { |
| | | "url": "https://github.com/fb55/domelementtype/issues" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "deprecated": false, |
| | | "description": "all the types of nodes in htmlparser2's dom", |
| | | "homepage": "https://github.com/fb55/domelementtype#readme", |
| | | "keywords": [ |
| | | "dom", |
| | | "htmlparser2" |
| | | ], |
| | | "license": "BSD-2-Clause", |
| | | "main": "index.js", |
| | | "name": "domelementtype", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git://github.com/fb55/domelementtype.git" |
| | | }, |
| | | "version": "1.3.1" |
| | | } |
New file |
| | |
| | | all the types of nodes in htmlparser2's dom |
New file |
| | |
| | | before_install: |
| | | - '[ "${TRAVIS_NODE_VERSION}" != "0.8" ] || npm install -g npm@1.4.28' |
| | | - npm install -g npm@latest |
| | | language: node_js |
| | | node_js: |
| | | - 8 |
New file |
| | |
| | | Copyright (c) Felix Böhm |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: |
| | | |
| | | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. |
| | | |
| | | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. |
| | | |
| | | THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
New file |
| | |
| | | var ElementType = require("domelementtype"); |
| | | |
| | | var re_whitespace = /\s+/g; |
| | | var NodePrototype = require("./lib/node"); |
| | | var ElementPrototype = require("./lib/element"); |
| | | |
| | | function DomHandler(callback, options, elementCB){ |
| | | if(typeof callback === "object"){ |
| | | elementCB = options; |
| | | options = callback; |
| | | callback = null; |
| | | } else if(typeof options === "function"){ |
| | | elementCB = options; |
| | | options = defaultOpts; |
| | | } |
| | | this._callback = callback; |
| | | this._options = options || defaultOpts; |
| | | this._elementCB = elementCB; |
| | | this.dom = []; |
| | | this._done = false; |
| | | this._tagStack = []; |
| | | this._parser = this._parser || null; |
| | | } |
| | | |
| | | //default options |
| | | var defaultOpts = { |
| | | normalizeWhitespace: false, //Replace all whitespace with single spaces |
| | | withStartIndices: false, //Add startIndex properties to nodes |
| | | withEndIndices: false, //Add endIndex properties to nodes |
| | | }; |
| | | |
| | | DomHandler.prototype.onparserinit = function(parser){ |
| | | this._parser = parser; |
| | | }; |
| | | |
| | | //Resets the handler back to starting state |
| | | DomHandler.prototype.onreset = function(){ |
| | | DomHandler.call(this, this._callback, this._options, this._elementCB); |
| | | }; |
| | | |
| | | //Signals the handler that parsing is done |
| | | DomHandler.prototype.onend = function(){ |
| | | if(this._done) return; |
| | | this._done = true; |
| | | this._parser = null; |
| | | this._handleCallback(null); |
| | | }; |
| | | |
| | | DomHandler.prototype._handleCallback = |
| | | DomHandler.prototype.onerror = function(error){ |
| | | if(typeof this._callback === "function"){ |
| | | this._callback(error, this.dom); |
| | | } else { |
| | | if(error) throw error; |
| | | } |
| | | }; |
| | | |
| | | DomHandler.prototype.onclosetag = function(){ |
| | | //if(this._tagStack.pop().name !== name) this._handleCallback(Error("Tagname didn't match!")); |
| | | |
| | | var elem = this._tagStack.pop(); |
| | | |
| | | if(this._options.withEndIndices && elem){ |
| | | elem.endIndex = this._parser.endIndex; |
| | | } |
| | | |
| | | if(this._elementCB) this._elementCB(elem); |
| | | }; |
| | | |
| | | DomHandler.prototype._createDomElement = function(properties){ |
| | | if (!this._options.withDomLvl1) return properties; |
| | | |
| | | var element; |
| | | if (properties.type === "tag") { |
| | | element = Object.create(ElementPrototype); |
| | | } else { |
| | | element = Object.create(NodePrototype); |
| | | } |
| | | |
| | | for (var key in properties) { |
| | | if (properties.hasOwnProperty(key)) { |
| | | element[key] = properties[key]; |
| | | } |
| | | } |
| | | |
| | | return element; |
| | | }; |
| | | |
| | | DomHandler.prototype._addDomElement = function(element){ |
| | | var parent = this._tagStack[this._tagStack.length - 1]; |
| | | var siblings = parent ? parent.children : this.dom; |
| | | var previousSibling = siblings[siblings.length - 1]; |
| | | |
| | | element.next = null; |
| | | |
| | | if(this._options.withStartIndices){ |
| | | element.startIndex = this._parser.startIndex; |
| | | } |
| | | if(this._options.withEndIndices){ |
| | | element.endIndex = this._parser.endIndex; |
| | | } |
| | | |
| | | if(previousSibling){ |
| | | element.prev = previousSibling; |
| | | previousSibling.next = element; |
| | | } else { |
| | | element.prev = null; |
| | | } |
| | | |
| | | siblings.push(element); |
| | | element.parent = parent || null; |
| | | }; |
| | | |
| | | DomHandler.prototype.onopentag = function(name, attribs){ |
| | | var properties = { |
| | | type: name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag, |
| | | name: name, |
| | | attribs: attribs, |
| | | children: [] |
| | | }; |
| | | |
| | | var element = this._createDomElement(properties); |
| | | |
| | | this._addDomElement(element); |
| | | |
| | | this._tagStack.push(element); |
| | | }; |
| | | |
| | | DomHandler.prototype.ontext = function(data){ |
| | | //the ignoreWhitespace is officially dropped, but for now, |
| | | //it's an alias for normalizeWhitespace |
| | | var normalize = this._options.normalizeWhitespace || this._options.ignoreWhitespace; |
| | | |
| | | var lastTag; |
| | | |
| | | if(!this._tagStack.length && this.dom.length && (lastTag = this.dom[this.dom.length-1]).type === ElementType.Text){ |
| | | if(normalize){ |
| | | lastTag.data = (lastTag.data + data).replace(re_whitespace, " "); |
| | | } else { |
| | | lastTag.data += data; |
| | | } |
| | | } else { |
| | | if( |
| | | this._tagStack.length && |
| | | (lastTag = this._tagStack[this._tagStack.length - 1]) && |
| | | (lastTag = lastTag.children[lastTag.children.length - 1]) && |
| | | lastTag.type === ElementType.Text |
| | | ){ |
| | | if(normalize){ |
| | | lastTag.data = (lastTag.data + data).replace(re_whitespace, " "); |
| | | } else { |
| | | lastTag.data += data; |
| | | } |
| | | } else { |
| | | if(normalize){ |
| | | data = data.replace(re_whitespace, " "); |
| | | } |
| | | |
| | | var element = this._createDomElement({ |
| | | data: data, |
| | | type: ElementType.Text |
| | | }); |
| | | |
| | | this._addDomElement(element); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | DomHandler.prototype.oncomment = function(data){ |
| | | var lastTag = this._tagStack[this._tagStack.length - 1]; |
| | | |
| | | if(lastTag && lastTag.type === ElementType.Comment){ |
| | | lastTag.data += data; |
| | | return; |
| | | } |
| | | |
| | | var properties = { |
| | | data: data, |
| | | type: ElementType.Comment |
| | | }; |
| | | |
| | | var element = this._createDomElement(properties); |
| | | |
| | | this._addDomElement(element); |
| | | this._tagStack.push(element); |
| | | }; |
| | | |
| | | DomHandler.prototype.oncdatastart = function(){ |
| | | var properties = { |
| | | children: [{ |
| | | data: "", |
| | | type: ElementType.Text |
| | | }], |
| | | type: ElementType.CDATA |
| | | }; |
| | | |
| | | var element = this._createDomElement(properties); |
| | | |
| | | this._addDomElement(element); |
| | | this._tagStack.push(element); |
| | | }; |
| | | |
| | | DomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){ |
| | | this._tagStack.pop(); |
| | | }; |
| | | |
| | | DomHandler.prototype.onprocessinginstruction = function(name, data){ |
| | | var element = this._createDomElement({ |
| | | name: name, |
| | | data: data, |
| | | type: ElementType.Directive |
| | | }); |
| | | |
| | | this._addDomElement(element); |
| | | }; |
| | | |
| | | module.exports = DomHandler; |
New file |
| | |
| | | // DOM-Level-1-compliant structure |
| | | var NodePrototype = require('./node'); |
| | | var ElementPrototype = module.exports = Object.create(NodePrototype); |
| | | |
| | | var domLvl1 = { |
| | | tagName: "name" |
| | | }; |
| | | |
| | | Object.keys(domLvl1).forEach(function(key) { |
| | | var shorthand = domLvl1[key]; |
| | | Object.defineProperty(ElementPrototype, key, { |
| | | get: function() { |
| | | return this[shorthand] || null; |
| | | }, |
| | | set: function(val) { |
| | | this[shorthand] = val; |
| | | return val; |
| | | } |
| | | }); |
| | | }); |
New file |
| | |
| | | // This object will be used as the prototype for Nodes when creating a |
| | | // DOM-Level-1-compliant structure. |
| | | var NodePrototype = module.exports = { |
| | | get firstChild() { |
| | | var children = this.children; |
| | | return children && children[0] || null; |
| | | }, |
| | | get lastChild() { |
| | | var children = this.children; |
| | | return children && children[children.length - 1] || null; |
| | | }, |
| | | get nodeType() { |
| | | return nodeTypes[this.type] || nodeTypes.element; |
| | | } |
| | | }; |
| | | |
| | | var domLvl1 = { |
| | | tagName: "name", |
| | | childNodes: "children", |
| | | parentNode: "parent", |
| | | previousSibling: "prev", |
| | | nextSibling: "next", |
| | | nodeValue: "data" |
| | | }; |
| | | |
| | | var nodeTypes = { |
| | | element: 1, |
| | | text: 3, |
| | | cdata: 4, |
| | | comment: 8 |
| | | }; |
| | | |
| | | Object.keys(domLvl1).forEach(function(key) { |
| | | var shorthand = domLvl1[key]; |
| | | Object.defineProperty(NodePrototype, key, { |
| | | get: function() { |
| | | return this[shorthand] || null; |
| | | }, |
| | | set: function(val) { |
| | | this[shorthand] = val; |
| | | return val; |
| | | } |
| | | }); |
| | | }); |
New file |
| | |
| | | { |
| | | "_from": "domhandler@^2.4.2", |
| | | "_id": "domhandler@2.4.2", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", |
| | | "_location": "/domhandler", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "range", |
| | | "registry": true, |
| | | "raw": "domhandler@^2.4.2", |
| | | "name": "domhandler", |
| | | "escapedName": "domhandler", |
| | | "rawSpec": "^2.4.2", |
| | | "saveSpec": null, |
| | | "fetchSpec": "^2.4.2" |
| | | }, |
| | | "_requiredBy": [ |
| | | "/mini-html-parser2" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", |
| | | "_shasum": "8805097e933d65e85546f726d60f5eb88b44f803", |
| | | "_spec": "domhandler@^2.4.2", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky\\node_modules\\mini-html-parser2", |
| | | "author": { |
| | | "name": "Felix Boehm", |
| | | "email": "me@feedic.com" |
| | | }, |
| | | "bugs": { |
| | | "url": "https://github.com/fb55/DomHandler/issues" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "dependencies": { |
| | | "domelementtype": "1" |
| | | }, |
| | | "deprecated": false, |
| | | "description": "handler for htmlparser2 that turns pages into a dom", |
| | | "devDependencies": { |
| | | "htmlparser2": "^3.9.0", |
| | | "jshint": "^2.9.1", |
| | | "mocha": "^3.0.2" |
| | | }, |
| | | "directories": { |
| | | "test": "tests" |
| | | }, |
| | | "homepage": "https://github.com/fb55/DomHandler#readme", |
| | | "jshintConfig": { |
| | | "quotmark": "double", |
| | | "trailing": true, |
| | | "unused": true, |
| | | "undef": true, |
| | | "node": true, |
| | | "proto": true, |
| | | "globals": { |
| | | "it": true |
| | | } |
| | | }, |
| | | "keywords": [ |
| | | "dom", |
| | | "htmlparser2" |
| | | ], |
| | | "license": "BSD-2-Clause", |
| | | "main": "index.js", |
| | | "name": "domhandler", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git://github.com/fb55/DomHandler.git" |
| | | }, |
| | | "scripts": { |
| | | "test": "mocha -R list && jshint index.js test/" |
| | | }, |
| | | "version": "2.4.2" |
| | | } |
New file |
| | |
| | | # domhandler [](https://travis-ci.org/fb55/domhandler) |
| | | |
| | | The DOM handler (formally known as DefaultHandler) creates a tree containing all nodes of a page. The tree may be manipulated using the [domutils](https://github.com/fb55/domutils) library. |
| | | |
| | | ## Usage |
| | | ```javascript |
| | | var handler = new DomHandler([ <func> callback(err, dom), ] [ <obj> options ]); |
| | | // var parser = new Parser(handler[, options]); |
| | | ``` |
| | | |
| | | Available options are described below. |
| | | |
| | | ## Example |
| | | ```javascript |
| | | var htmlparser = require("htmlparser2"); |
| | | var rawHtml = "Xyz <script language= javascript>var foo = '<<bar>>';< / script><!--<!-- Waah! -- -->"; |
| | | var handler = new htmlparser.DomHandler(function (error, dom) { |
| | | if (error) |
| | | [...do something for errors...] |
| | | else |
| | | [...parsing done, do something...] |
| | | console.log(dom); |
| | | }); |
| | | var parser = new htmlparser.Parser(handler); |
| | | parser.write(rawHtml); |
| | | parser.end(); |
| | | ``` |
| | | |
| | | Output: |
| | | |
| | | ```javascript |
| | | [{ |
| | | data: 'Xyz ', |
| | | type: 'text' |
| | | }, { |
| | | type: 'script', |
| | | name: 'script', |
| | | attribs: { |
| | | language: 'javascript' |
| | | }, |
| | | children: [{ |
| | | data: 'var foo = \'<bar>\';<', |
| | | type: 'text' |
| | | }] |
| | | }, { |
| | | data: '<!-- Waah! -- ', |
| | | type: 'comment' |
| | | }] |
| | | ``` |
| | | |
| | | ## Option: normalizeWhitespace |
| | | Indicates whether the whitespace in text nodes should be normalized (= all whitespace should be replaced with single spaces). The default value is "false". |
| | | |
| | | The following HTML will be used: |
| | | |
| | | ```html |
| | | <font> |
| | | <br>this is the text |
| | | <font> |
| | | ``` |
| | | |
| | | ### Example: true |
| | | |
| | | ```javascript |
| | | [{ |
| | | type: 'tag', |
| | | name: 'font', |
| | | children: [{ |
| | | data: ' ', |
| | | type: 'text' |
| | | }, { |
| | | type: 'tag', |
| | | name: 'br' |
| | | }, { |
| | | data: 'this is the text ', |
| | | type: 'text' |
| | | }, { |
| | | type: 'tag', |
| | | name: 'font' |
| | | }] |
| | | }] |
| | | ``` |
| | | |
| | | ### Example: false |
| | | |
| | | ```javascript |
| | | [{ |
| | | type: 'tag', |
| | | name: 'font', |
| | | children: [{ |
| | | data: '\n\t', |
| | | type: 'text' |
| | | }, { |
| | | type: 'tag', |
| | | name: 'br' |
| | | }, { |
| | | data: 'this is the text\n', |
| | | type: 'text' |
| | | }, { |
| | | type: 'tag', |
| | | name: 'font' |
| | | }] |
| | | }] |
| | | ``` |
| | | |
| | | ## Option: withDomLvl1 |
| | | |
| | | Adds DOM level 1 properties to all elements. |
| | | |
| | | <!-- TODO: description --> |
| | | |
| | | ## Option: withStartIndices |
| | | Indicates whether a `startIndex` property will be added to nodes. When the parser is used in a non-streaming fashion, `startIndex` is an integer indicating the position of the start of the node in the document. The default value is "false". |
| | | |
| | | ## Option: withEndIndices |
| | | Indicates whether a `endIndex` property will be added to nodes. When the parser is used in a non-streaming fashion, `endIndex` is an integer indicating the position of the end of the node in the document. The default value is "false". |
New file |
| | |
| | | { |
| | | "name": "Basic test", |
| | | "options": {}, |
| | | "html": "<!DOCTYPE html><html><title>The Title</title><body>Hello world</body></html>", |
| | | "expected": [ |
| | | { |
| | | "name": "!doctype", |
| | | "data": "!DOCTYPE html", |
| | | "type": "directive" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "html", |
| | | "attribs": {}, |
| | | "parent": null, |
| | | "children": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {}, |
| | | "parent": { |
| | | "type": "tag", |
| | | "name": "html", |
| | | "attribs": {} |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "The Title", |
| | | "type": "text", |
| | | "parent": { |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {} |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "body", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "Hello world", |
| | | "type": "text" |
| | | } |
| | | ], |
| | | "prev": { |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {} |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Single Tag 1", |
| | | "options": {}, |
| | | "html": "<br>text</br>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": "text", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Single Tag 2", |
| | | "options": {}, |
| | | "html": "<br>text<br>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": "text", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Unescaped chars in script", |
| | | "options": {}, |
| | | "html": "<head><script language=\"Javascript\">var foo = \"<bar>\"; alert(2 > foo); var baz = 10 << 2; var zip = 10 >> 1; var yap = \"<<>>>><<\";</script></head>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "head", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "type": "script", |
| | | "name": "script", |
| | | "attribs": { |
| | | "language": "Javascript" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "var foo = \"<bar>\"; alert(2 > foo); var baz = 10 << 2; var zip = 10 >> 1; var yap = \"<<>>>><<\";", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Special char in comment", |
| | | "options": {}, |
| | | "html": "<head><!-- commented out tags <title>Test</title>--></head>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "head", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": " commented out tags <title>Test</title>", |
| | | "type": "comment" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Script source in comment", |
| | | "options": {}, |
| | | "html": "<script><!--var foo = 1;--></script>", |
| | | "expected": [ |
| | | { |
| | | "type": "script", |
| | | "name": "script", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "<!--var foo = 1;-->", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Unescaped chars in style", |
| | | "options": {}, |
| | | "html": "<style type=\"text/css\">\n body > p\n\t{ font-weight: bold; }</style>", |
| | | "expected": [ |
| | | { |
| | | "type": "style", |
| | | "name": "style", |
| | | "attribs": { |
| | | "type": "text/css" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "\n body > p\n\t{ font-weight: bold; }", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Extra spaces in tag", |
| | | "options": {}, |
| | | "html": "<font\t\n size='14' \n>the text</\t\nfont\t \n>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "font", |
| | | "attribs": { |
| | | "size": "14" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Unquoted attributes", |
| | | "options": {}, |
| | | "html": "<font size= 14>the text</font>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "font", |
| | | "attribs": { |
| | | "size": "14" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Singular attribute", |
| | | "options": {}, |
| | | "html": "<option value='foo' selected>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "option", |
| | | "attribs": { |
| | | "value": "foo", |
| | | "selected": "" |
| | | } |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Text outside tags", |
| | | "options": {}, |
| | | "html": "Line one\n<br>\nline two", |
| | | "expected": [ |
| | | { |
| | | "data": "Line one\n", |
| | | "type": "text", |
| | | "prev": null, |
| | | "next": { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | } |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {}, |
| | | "prev": { |
| | | "data": "Line one\n", |
| | | "type": "text" |
| | | }, |
| | | "next": { |
| | | "data": "\nline two", |
| | | "type": "text" |
| | | } |
| | | }, |
| | | { |
| | | "data": "\nline two", |
| | | "type": "text", |
| | | "prev": { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | "next": null |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Only text", |
| | | "options": {}, |
| | | "html": "this is the text", |
| | | "expected": [ |
| | | { |
| | | "data": "this is the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Comment within text", |
| | | "options": {}, |
| | | "html": "this is <!-- the comment --> the text", |
| | | "expected": [ |
| | | { |
| | | "data": "this is ", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "data": " the comment ", |
| | | "type": "comment" |
| | | }, |
| | | { |
| | | "data": " the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Comment within text within script", |
| | | "options": {}, |
| | | "html": "<script>this is <!-- the comment --> the text</script>", |
| | | "expected": [ |
| | | { |
| | | "type": "script", |
| | | "name": "script", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "this is <!-- the comment --> the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Option 'verbose' set to 'false'", |
| | | "options": { |
| | | "verbose": false |
| | | }, |
| | | "html": "<font\t\n size='14' \n>the text</\t\nfont\t \n>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "font", |
| | | "attribs": { |
| | | "size": "14" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "the text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Normalize whitespace", |
| | | "options": { |
| | | "normalizeWhitespace": true |
| | | }, |
| | | "html": "Line one\n<br>\t \r\n\f <br>\nline two<font><br> x </font>", |
| | | "expected": [ |
| | | { |
| | | "data": "Line one ", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": " ", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": " line two", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "font", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "br", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": " x ", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "XML Namespace", |
| | | "options": {}, |
| | | "html": "<ns:tag>text</ns:tag>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "ns:tag", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Enforce empty tags", |
| | | "options": {}, |
| | | "html": "<link>text</link>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "link", |
| | | "attribs": {} |
| | | }, |
| | | { |
| | | "data": "text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Ignore empty tags (xml mode)", |
| | | "options": { |
| | | "xmlMode": true |
| | | }, |
| | | "html": "<link>text</link>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "link", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "text", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Template script tags", |
| | | "options": {}, |
| | | "html": "<script type=\"text/template\"><h1>Heading1</h1></script>", |
| | | "expected": [ |
| | | { |
| | | "type": "script", |
| | | "name": "script", |
| | | "attribs": { |
| | | "type": "text/template" |
| | | }, |
| | | "children": [ |
| | | { |
| | | "data": "<h1>Heading1</h1>", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "Conditional comments", |
| | | "options": {}, |
| | | "html": "<!--[if lt IE 7]> <html class='no-js ie6 oldie' lang='en'> <![endif]--><!--[if lt IE 7]> <html class='no-js ie6 oldie' lang='en'> <![endif]-->", |
| | | "expected": [ |
| | | { |
| | | "data": "[if lt IE 7]> <html class='no-js ie6 oldie' lang='en'> <![endif]", |
| | | "type": "comment" |
| | | }, |
| | | { |
| | | "data": "[if lt IE 7]> <html class='no-js ie6 oldie' lang='en'> <![endif]", |
| | | "type": "comment" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "lowercase tags", |
| | | "options": {}, |
| | | "html": "<!DOCTYPE html><HTML><TITLE>The Title</title><BODY>Hello world</body></html>", |
| | | "expected": [ |
| | | { |
| | | "name": "!doctype", |
| | | "data": "!DOCTYPE html", |
| | | "type": "directive" |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "html", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "The Title", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "name": "body", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "data": "Hello world", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "DOM level 1", |
| | | "options": { "withDomLvl1": true }, |
| | | "html": "<div>some stray text<h1>Hello, world.</h1><!-- comment node -->more stray text</div>", |
| | | "expected": [ |
| | | { |
| | | "type": "tag", |
| | | "nodeType": 1, |
| | | "name": "div", |
| | | "tagName": "div", |
| | | "attribs": {}, |
| | | "nodeValue": null, |
| | | "children": [ |
| | | { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "some stray text", |
| | | "nodeValue": "some stray text", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | }, |
| | | { |
| | | "type": "tag", |
| | | "nodeType": 1, |
| | | "name": "h1", |
| | | "tagName": "h1", |
| | | "nodeValue": null, |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "Hello, world.", |
| | | "nodeValue": "Hello, world.", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | } |
| | | ], |
| | | "firstChild": { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "Hello, world.", |
| | | "nodeValue": "Hello, world.", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | }, |
| | | "lastChild": { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "Hello, world.", |
| | | "nodeValue": "Hello, world.", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | } |
| | | }, |
| | | { |
| | | "type": "comment", |
| | | "nodeType": 8, |
| | | "tagName": null, |
| | | "data": " comment node ", |
| | | "nodeValue": " comment node ", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null, |
| | | "prev": { |
| | | "type": "tag", |
| | | "name": "h1", |
| | | "nodeValue": null, |
| | | "attribs": {} |
| | | }, |
| | | "previousSibling": { |
| | | "type": "tag", |
| | | "name": "h1", |
| | | "nodeValue": null, |
| | | "attribs": {} |
| | | }, |
| | | "next": { |
| | | "type": "text", |
| | | "tagName": null, |
| | | "data": "more stray text" |
| | | }, |
| | | "nextSibling": { |
| | | "type": "text", |
| | | "tagName": null, |
| | | "data": "more stray text" |
| | | } |
| | | }, |
| | | { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "more stray text", |
| | | "nodeValue": "more stray text", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null, |
| | | "next": null, |
| | | "nextSibling": null |
| | | } |
| | | ], |
| | | "firstChild": { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "some stray text", |
| | | "nodeValue": "some stray text", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | }, |
| | | "lastChild": { |
| | | "type": "text", |
| | | "nodeType": 3, |
| | | "tagName": null, |
| | | "data": "more stray text", |
| | | "nodeValue": "more stray text", |
| | | "childNodes": null, |
| | | "firstChild": null, |
| | | "lastChild": null |
| | | } |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "withStartIndices adds correct startIndex properties", |
| | | "options": {"withStartIndices": true}, |
| | | "streaming": false, |
| | | "html": "<!DOCTYPE html> <html> <title>The Title</title> <body class='foo'>Hello world <p></p></body> <!-- the comment --> </html> ", |
| | | "expected": [ |
| | | { |
| | | "startIndex": 0, |
| | | "name": "!doctype", |
| | | "data": "!DOCTYPE html", |
| | | "type": "directive" |
| | | }, |
| | | { |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "startIndex": 16, |
| | | "type": "tag", |
| | | "name": "html", |
| | | "attribs": {}, |
| | | "parent": null, |
| | | "children": [ |
| | | { |
| | | "startIndex": 22, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "startIndex": 23, |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "startIndex": 30, |
| | | "data": "The Title", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "startIndex": 47, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "startIndex": 48, |
| | | "type": "tag", |
| | | "name": "body", |
| | | "attribs": {"class": "foo"}, |
| | | "children": [ |
| | | { |
| | | "startIndex": 66, |
| | | "data": "Hello world ", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "startIndex": 78, |
| | | "type": "tag", |
| | | "name": "p", |
| | | "attribs": {}, |
| | | "children": [] |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "startIndex": 92, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "startIndex": 93, |
| | | "type": "comment", |
| | | "data": " the comment " |
| | | }, |
| | | { |
| | | "startIndex": 113, |
| | | "type": "text", |
| | | "data": " " |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "withEndIndices adds correct endIndex properties", |
| | | "options": {"withStartIndices": true,"withEndIndices": true}, |
| | | "streaming": false, |
| | | "html": "<!DOCTYPE html> <html> <title>The Title</title> <body class='foo'>Hello world <p></p></body> <!-- the comment --> </html> ", |
| | | "expected": [ |
| | | { |
| | | "endIndex": null, |
| | | "name": "!doctype", |
| | | "data": "!DOCTYPE html", |
| | | "type": "directive" |
| | | }, |
| | | { |
| | | "type": "text", |
| | | "data": " ", |
| | | "endIndex": 15 |
| | | }, |
| | | { |
| | | "endIndex": 120, |
| | | "type": "tag", |
| | | "name": "html", |
| | | "attribs": {}, |
| | | "parent": null, |
| | | "children": [ |
| | | { |
| | | "endIndex": 22, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "endIndex": 46, |
| | | "type": "tag", |
| | | "name": "title", |
| | | "attribs": {}, |
| | | "children": [ |
| | | { |
| | | "endIndex": 38, |
| | | "data": "The Title", |
| | | "type": "text" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "endIndex": 47, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "endIndex": 91, |
| | | "type": "tag", |
| | | "name": "body", |
| | | "attribs": {"class": "foo"}, |
| | | "children": [ |
| | | { |
| | | "endIndex": 77, |
| | | "data": "Hello world ", |
| | | "type": "text" |
| | | }, |
| | | { |
| | | "endIndex": 84, |
| | | "type": "tag", |
| | | "name": "p", |
| | | "attribs": {}, |
| | | "children": [] |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "endIndex": 92, |
| | | "type": "text", |
| | | "data": " " |
| | | }, |
| | | { |
| | | "endIndex": 112, |
| | | "type": "comment", |
| | | "data": " the comment " |
| | | }, |
| | | { |
| | | "endIndex": 113, |
| | | "type": "text", |
| | | "data": " " |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | var fs = require("fs"), |
| | | path = require("path"), |
| | | assert = require("assert"), |
| | | util = require("util"), |
| | | Parser = require("htmlparser2").Parser, |
| | | Handler = require("../"); |
| | | |
| | | var basePath = path.resolve(__dirname, "cases"), |
| | | inspectOpts = { showHidden: true, depth: null }; |
| | | |
| | | fs |
| | | .readdirSync(basePath) |
| | | .filter(RegExp.prototype.test, /\.json$/) //only allow .json files |
| | | .map(function(name){ |
| | | return path.resolve(basePath, name); |
| | | }) |
| | | .map(require) |
| | | .forEach(function(test){ |
| | | it(test.name, function(){ |
| | | var expected = test.expected; |
| | | |
| | | var handler = new Handler(function(err, actual){ |
| | | assert.ifError(err); |
| | | try { |
| | | compare(expected, actual); |
| | | } catch(e){ |
| | | e.expected = util.inspect(expected, inspectOpts); |
| | | e.actual = util.inspect(actual, inspectOpts); |
| | | throw e; |
| | | } |
| | | }, test.options); |
| | | |
| | | var data = test.html; |
| | | |
| | | var parser = new Parser(handler, test.options); |
| | | |
| | | //first, try to run the test via chunks |
| | | if (test.streaming || test.streaming === undefined){ |
| | | for(var i = 0; i < data.length; i++){ |
| | | parser.write(data.charAt(i)); |
| | | } |
| | | parser.done(); |
| | | } |
| | | |
| | | //then parse everything |
| | | parser.parseComplete(data); |
| | | }); |
| | | }); |
| | | |
| | | function compare(expected, result){ |
| | | assert.equal(typeof expected, typeof result, "types didn't match"); |
| | | if(typeof expected !== "object" || expected === null){ |
| | | assert.strictEqual(expected, result, "result doesn't equal expected"); |
| | | } else { |
| | | for(var prop in expected){ |
| | | assert.ok(prop in result, "result didn't contain property " + prop); |
| | | compare(expected[prop], result[prop]); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | sudo: true |
| | | language: node_js |
| | | node_js: |
| | | - 8 |
| | | script: npm run coveralls |
New file |
| | |
| | | Copyright (c) Felix Böhm |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: |
| | | |
| | | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. |
| | | |
| | | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. |
| | | |
| | | THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
New file |
| | |
| | | var encode = require("./lib/encode.js"), |
| | | decode = require("./lib/decode.js"); |
| | | |
| | | exports.decode = function(data, level) { |
| | | return (!level || level <= 0 ? decode.XML : decode.HTML)(data); |
| | | }; |
| | | |
| | | exports.decodeStrict = function(data, level) { |
| | | return (!level || level <= 0 ? decode.XML : decode.HTMLStrict)(data); |
| | | }; |
| | | |
| | | exports.encode = function(data, level) { |
| | | return (!level || level <= 0 ? encode.XML : encode.HTML)(data); |
| | | }; |
| | | |
| | | exports.encodeXML = encode.XML; |
| | | |
| | | exports.encodeHTML4 = exports.encodeHTML5 = exports.encodeHTML = encode.HTML; |
| | | |
| | | exports.decodeXML = exports.decodeXMLStrict = decode.XML; |
| | | |
| | | exports.decodeHTML4 = exports.decodeHTML5 = exports.decodeHTML = decode.HTML; |
| | | |
| | | exports.decodeHTML4Strict = exports.decodeHTML5Strict = exports.decodeHTMLStrict = decode.HTMLStrict; |
| | | |
| | | exports.escape = encode.escape; |
New file |
| | |
| | | var entityMap = require("../maps/entities.json"), |
| | | legacyMap = require("../maps/legacy.json"), |
| | | xmlMap = require("../maps/xml.json"), |
| | | decodeCodePoint = require("./decode_codepoint.js"); |
| | | |
| | | var decodeXMLStrict = getStrictDecoder(xmlMap), |
| | | decodeHTMLStrict = getStrictDecoder(entityMap); |
| | | |
| | | function getStrictDecoder(map) { |
| | | var keys = Object.keys(map).join("|"), |
| | | replace = getReplacer(map); |
| | | |
| | | keys += "|#[xX][\\da-fA-F]+|#\\d+"; |
| | | |
| | | var re = new RegExp("&(?:" + keys + ");", "g"); |
| | | |
| | | return function(str) { |
| | | return String(str).replace(re, replace); |
| | | }; |
| | | } |
| | | |
| | | var decodeHTML = (function() { |
| | | var legacy = Object.keys(legacyMap).sort(sorter); |
| | | |
| | | var keys = Object.keys(entityMap).sort(sorter); |
| | | |
| | | for (var i = 0, j = 0; i < keys.length; i++) { |
| | | if (legacy[j] === keys[i]) { |
| | | keys[i] += ";?"; |
| | | j++; |
| | | } else { |
| | | keys[i] += ";"; |
| | | } |
| | | } |
| | | |
| | | var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"), |
| | | replace = getReplacer(entityMap); |
| | | |
| | | function replacer(str) { |
| | | if (str.substr(-1) !== ";") str += ";"; |
| | | return replace(str); |
| | | } |
| | | |
| | | //TODO consider creating a merged map |
| | | return function(str) { |
| | | return String(str).replace(re, replacer); |
| | | }; |
| | | })(); |
| | | |
| | | function sorter(a, b) { |
| | | return a < b ? 1 : -1; |
| | | } |
| | | |
| | | function getReplacer(map) { |
| | | return function replace(str) { |
| | | if (str.charAt(1) === "#") { |
| | | if (str.charAt(2) === "X" || str.charAt(2) === "x") { |
| | | return decodeCodePoint(parseInt(str.substr(3), 16)); |
| | | } |
| | | return decodeCodePoint(parseInt(str.substr(2), 10)); |
| | | } |
| | | return map[str.slice(1, -1)]; |
| | | }; |
| | | } |
| | | |
| | | module.exports = { |
| | | XML: decodeXMLStrict, |
| | | HTML: decodeHTML, |
| | | HTMLStrict: decodeHTMLStrict |
| | | }; |
New file |
| | |
| | | var decodeMap = require("../maps/decode.json"); |
| | | |
| | | module.exports = decodeCodePoint; |
| | | |
| | | // modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119 |
| | | function decodeCodePoint(codePoint) { |
| | | if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { |
| | | return "\uFFFD"; |
| | | } |
| | | |
| | | if (codePoint in decodeMap) { |
| | | codePoint = decodeMap[codePoint]; |
| | | } |
| | | |
| | | var output = ""; |
| | | |
| | | if (codePoint > 0xffff) { |
| | | codePoint -= 0x10000; |
| | | output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); |
| | | codePoint = 0xdc00 | (codePoint & 0x3ff); |
| | | } |
| | | |
| | | output += String.fromCharCode(codePoint); |
| | | return output; |
| | | } |
New file |
| | |
| | | var inverseXML = getInverseObj(require("../maps/xml.json")), |
| | | xmlReplacer = getInverseReplacer(inverseXML); |
| | | |
| | | exports.XML = getInverse(inverseXML, xmlReplacer); |
| | | |
| | | var inverseHTML = getInverseObj(require("../maps/entities.json")), |
| | | htmlReplacer = getInverseReplacer(inverseHTML); |
| | | |
| | | exports.HTML = getInverse(inverseHTML, htmlReplacer); |
| | | |
| | | function getInverseObj(obj) { |
| | | return Object.keys(obj) |
| | | .sort() |
| | | .reduce(function(inverse, name) { |
| | | inverse[obj[name]] = "&" + name + ";"; |
| | | return inverse; |
| | | }, {}); |
| | | } |
| | | |
| | | function getInverseReplacer(inverse) { |
| | | var single = [], |
| | | multiple = []; |
| | | |
| | | Object.keys(inverse).forEach(function(k) { |
| | | if (k.length === 1) { |
| | | single.push("\\" + k); |
| | | } else { |
| | | multiple.push(k); |
| | | } |
| | | }); |
| | | |
| | | //TODO add ranges |
| | | multiple.unshift("[" + single.join("") + "]"); |
| | | |
| | | return new RegExp(multiple.join("|"), "g"); |
| | | } |
| | | |
| | | var re_nonASCII = /[^\0-\x7F]/g, |
| | | re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; |
| | | |
| | | function singleCharReplacer(c) { |
| | | return ( |
| | | "&#x" + |
| | | c |
| | | .charCodeAt(0) |
| | | .toString(16) |
| | | .toUpperCase() + |
| | | ";" |
| | | ); |
| | | } |
| | | |
| | | function astralReplacer(c) { |
| | | // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae |
| | | var high = c.charCodeAt(0); |
| | | var low = c.charCodeAt(1); |
| | | var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000; |
| | | return "&#x" + codePoint.toString(16).toUpperCase() + ";"; |
| | | } |
| | | |
| | | function getInverse(inverse, re) { |
| | | function func(name) { |
| | | return inverse[name]; |
| | | } |
| | | |
| | | return function(data) { |
| | | return data |
| | | .replace(re, func) |
| | | .replace(re_astralSymbols, astralReplacer) |
| | | .replace(re_nonASCII, singleCharReplacer); |
| | | }; |
| | | } |
| | | |
| | | var re_xmlChars = getInverseReplacer(inverseXML); |
| | | |
| | | function escapeXML(data) { |
| | | return data |
| | | .replace(re_xmlChars, singleCharReplacer) |
| | | .replace(re_astralSymbols, astralReplacer) |
| | | .replace(re_nonASCII, singleCharReplacer); |
| | | } |
| | | |
| | | exports.escape = escapeXML; |
New file |
| | |
| | | {"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376} |
New file |
| | |
| | | {"Aacute":"\u00C1","aacute":"\u00E1","Abreve":"\u0102","abreve":"\u0103","ac":"\u223E","acd":"\u223F","acE":"\u223E\u0333","Acirc":"\u00C2","acirc":"\u00E2","acute":"\u00B4","Acy":"\u0410","acy":"\u0430","AElig":"\u00C6","aelig":"\u00E6","af":"\u2061","Afr":"\uD835\uDD04","afr":"\uD835\uDD1E","Agrave":"\u00C0","agrave":"\u00E0","alefsym":"\u2135","aleph":"\u2135","Alpha":"\u0391","alpha":"\u03B1","Amacr":"\u0100","amacr":"\u0101","amalg":"\u2A3F","amp":"&","AMP":"&","andand":"\u2A55","And":"\u2A53","and":"\u2227","andd":"\u2A5C","andslope":"\u2A58","andv":"\u2A5A","ang":"\u2220","ange":"\u29A4","angle":"\u2220","angmsdaa":"\u29A8","angmsdab":"\u29A9","angmsdac":"\u29AA","angmsdad":"\u29AB","angmsdae":"\u29AC","angmsdaf":"\u29AD","angmsdag":"\u29AE","angmsdah":"\u29AF","angmsd":"\u2221","angrt":"\u221F","angrtvb":"\u22BE","angrtvbd":"\u299D","angsph":"\u2222","angst":"\u00C5","angzarr":"\u237C","Aogon":"\u0104","aogon":"\u0105","Aopf":"\uD835\uDD38","aopf":"\uD835\uDD52","apacir":"\u2A6F","ap":"\u2248","apE":"\u2A70","ape":"\u224A","apid":"\u224B","apos":"'","ApplyFunction":"\u2061","approx":"\u2248","approxeq":"\u224A","Aring":"\u00C5","aring":"\u00E5","Ascr":"\uD835\uDC9C","ascr":"\uD835\uDCB6","Assign":"\u2254","ast":"*","asymp":"\u2248","asympeq":"\u224D","Atilde":"\u00C3","atilde":"\u00E3","Auml":"\u00C4","auml":"\u00E4","awconint":"\u2233","awint":"\u2A11","backcong":"\u224C","backepsilon":"\u03F6","backprime":"\u2035","backsim":"\u223D","backsimeq":"\u22CD","Backslash":"\u2216","Barv":"\u2AE7","barvee":"\u22BD","barwed":"\u2305","Barwed":"\u2306","barwedge":"\u2305","bbrk":"\u23B5","bbrktbrk":"\u23B6","bcong":"\u224C","Bcy":"\u0411","bcy":"\u0431","bdquo":"\u201E","becaus":"\u2235","because":"\u2235","Because":"\u2235","bemptyv":"\u29B0","bepsi":"\u03F6","bernou":"\u212C","Bernoullis":"\u212C","Beta":"\u0392","beta":"\u03B2","beth":"\u2136","between":"\u226C","Bfr":"\uD835\uDD05","bfr":"\uD835\uDD1F","bigcap":"\u22C2","bigcirc":"\u25EF","bigcup":"\u22C3","bigodot":"\u2A00","bigoplus":"\u2A01","bigotimes":"\u2A02","bigsqcup":"\u2A06","bigstar":"\u2605","bigtriangledown":"\u25BD","bigtriangleup":"\u25B3","biguplus":"\u2A04","bigvee":"\u22C1","bigwedge":"\u22C0","bkarow":"\u290D","blacklozenge":"\u29EB","blacksquare":"\u25AA","blacktriangle":"\u25B4","blacktriangledown":"\u25BE","blacktriangleleft":"\u25C2","blacktriangleright":"\u25B8","blank":"\u2423","blk12":"\u2592","blk14":"\u2591","blk34":"\u2593","block":"\u2588","bne":"=\u20E5","bnequiv":"\u2261\u20E5","bNot":"\u2AED","bnot":"\u2310","Bopf":"\uD835\uDD39","bopf":"\uD835\uDD53","bot":"\u22A5","bottom":"\u22A5","bowtie":"\u22C8","boxbox":"\u29C9","boxdl":"\u2510","boxdL":"\u2555","boxDl":"\u2556","boxDL":"\u2557","boxdr":"\u250C","boxdR":"\u2552","boxDr":"\u2553","boxDR":"\u2554","boxh":"\u2500","boxH":"\u2550","boxhd":"\u252C","boxHd":"\u2564","boxhD":"\u2565","boxHD":"\u2566","boxhu":"\u2534","boxHu":"\u2567","boxhU":"\u2568","boxHU":"\u2569","boxminus":"\u229F","boxplus":"\u229E","boxtimes":"\u22A0","boxul":"\u2518","boxuL":"\u255B","boxUl":"\u255C","boxUL":"\u255D","boxur":"\u2514","boxuR":"\u2558","boxUr":"\u2559","boxUR":"\u255A","boxv":"\u2502","boxV":"\u2551","boxvh":"\u253C","boxvH":"\u256A","boxVh":"\u256B","boxVH":"\u256C","boxvl":"\u2524","boxvL":"\u2561","boxVl":"\u2562","boxVL":"\u2563","boxvr":"\u251C","boxvR":"\u255E","boxVr":"\u255F","boxVR":"\u2560","bprime":"\u2035","breve":"\u02D8","Breve":"\u02D8","brvbar":"\u00A6","bscr":"\uD835\uDCB7","Bscr":"\u212C","bsemi":"\u204F","bsim":"\u223D","bsime":"\u22CD","bsolb":"\u29C5","bsol":"\\","bsolhsub":"\u27C8","bull":"\u2022","bullet":"\u2022","bump":"\u224E","bumpE":"\u2AAE","bumpe":"\u224F","Bumpeq":"\u224E","bumpeq":"\u224F","Cacute":"\u0106","cacute":"\u0107","capand":"\u2A44","capbrcup":"\u2A49","capcap":"\u2A4B","cap":"\u2229","Cap":"\u22D2","capcup":"\u2A47","capdot":"\u2A40","CapitalDifferentialD":"\u2145","caps":"\u2229\uFE00","caret":"\u2041","caron":"\u02C7","Cayleys":"\u212D","ccaps":"\u2A4D","Ccaron":"\u010C","ccaron":"\u010D","Ccedil":"\u00C7","ccedil":"\u00E7","Ccirc":"\u0108","ccirc":"\u0109","Cconint":"\u2230","ccups":"\u2A4C","ccupssm":"\u2A50","Cdot":"\u010A","cdot":"\u010B","cedil":"\u00B8","Cedilla":"\u00B8","cemptyv":"\u29B2","cent":"\u00A2","centerdot":"\u00B7","CenterDot":"\u00B7","cfr":"\uD835\uDD20","Cfr":"\u212D","CHcy":"\u0427","chcy":"\u0447","check":"\u2713","checkmark":"\u2713","Chi":"\u03A7","chi":"\u03C7","circ":"\u02C6","circeq":"\u2257","circlearrowleft":"\u21BA","circlearrowright":"\u21BB","circledast":"\u229B","circledcirc":"\u229A","circleddash":"\u229D","CircleDot":"\u2299","circledR":"\u00AE","circledS":"\u24C8","CircleMinus":"\u2296","CirclePlus":"\u2295","CircleTimes":"\u2297","cir":"\u25CB","cirE":"\u29C3","cire":"\u2257","cirfnint":"\u2A10","cirmid":"\u2AEF","cirscir":"\u29C2","ClockwiseContourIntegral":"\u2232","CloseCurlyDoubleQuote":"\u201D","CloseCurlyQuote":"\u2019","clubs":"\u2663","clubsuit":"\u2663","colon":":","Colon":"\u2237","Colone":"\u2A74","colone":"\u2254","coloneq":"\u2254","comma":",","commat":"@","comp":"\u2201","compfn":"\u2218","complement":"\u2201","complexes":"\u2102","cong":"\u2245","congdot":"\u2A6D","Congruent":"\u2261","conint":"\u222E","Conint":"\u222F","ContourIntegral":"\u222E","copf":"\uD835\uDD54","Copf":"\u2102","coprod":"\u2210","Coproduct":"\u2210","copy":"\u00A9","COPY":"\u00A9","copysr":"\u2117","CounterClockwiseContourIntegral":"\u2233","crarr":"\u21B5","cross":"\u2717","Cross":"\u2A2F","Cscr":"\uD835\uDC9E","cscr":"\uD835\uDCB8","csub":"\u2ACF","csube":"\u2AD1","csup":"\u2AD0","csupe":"\u2AD2","ctdot":"\u22EF","cudarrl":"\u2938","cudarrr":"\u2935","cuepr":"\u22DE","cuesc":"\u22DF","cularr":"\u21B6","cularrp":"\u293D","cupbrcap":"\u2A48","cupcap":"\u2A46","CupCap":"\u224D","cup":"\u222A","Cup":"\u22D3","cupcup":"\u2A4A","cupdot":"\u228D","cupor":"\u2A45","cups":"\u222A\uFE00","curarr":"\u21B7","curarrm":"\u293C","curlyeqprec":"\u22DE","curlyeqsucc":"\u22DF","curlyvee":"\u22CE","curlywedge":"\u22CF","curren":"\u00A4","curvearrowleft":"\u21B6","curvearrowright":"\u21B7","cuvee":"\u22CE","cuwed":"\u22CF","cwconint":"\u2232","cwint":"\u2231","cylcty":"\u232D","dagger":"\u2020","Dagger":"\u2021","daleth":"\u2138","darr":"\u2193","Darr":"\u21A1","dArr":"\u21D3","dash":"\u2010","Dashv":"\u2AE4","dashv":"\u22A3","dbkarow":"\u290F","dblac":"\u02DD","Dcaron":"\u010E","dcaron":"\u010F","Dcy":"\u0414","dcy":"\u0434","ddagger":"\u2021","ddarr":"\u21CA","DD":"\u2145","dd":"\u2146","DDotrahd":"\u2911","ddotseq":"\u2A77","deg":"\u00B0","Del":"\u2207","Delta":"\u0394","delta":"\u03B4","demptyv":"\u29B1","dfisht":"\u297F","Dfr":"\uD835\uDD07","dfr":"\uD835\uDD21","dHar":"\u2965","dharl":"\u21C3","dharr":"\u21C2","DiacriticalAcute":"\u00B4","DiacriticalDot":"\u02D9","DiacriticalDoubleAcute":"\u02DD","DiacriticalGrave":"`","DiacriticalTilde":"\u02DC","diam":"\u22C4","diamond":"\u22C4","Diamond":"\u22C4","diamondsuit":"\u2666","diams":"\u2666","die":"\u00A8","DifferentialD":"\u2146","digamma":"\u03DD","disin":"\u22F2","div":"\u00F7","divide":"\u00F7","divideontimes":"\u22C7","divonx":"\u22C7","DJcy":"\u0402","djcy":"\u0452","dlcorn":"\u231E","dlcrop":"\u230D","dollar":"$","Dopf":"\uD835\uDD3B","dopf":"\uD835\uDD55","Dot":"\u00A8","dot":"\u02D9","DotDot":"\u20DC","doteq":"\u2250","doteqdot":"\u2251","DotEqual":"\u2250","dotminus":"\u2238","dotplus":"\u2214","dotsquare":"\u22A1","doublebarwedge":"\u2306","DoubleContourIntegral":"\u222F","DoubleDot":"\u00A8","DoubleDownArrow":"\u21D3","DoubleLeftArrow":"\u21D0","DoubleLeftRightArrow":"\u21D4","DoubleLeftTee":"\u2AE4","DoubleLongLeftArrow":"\u27F8","DoubleLongLeftRightArrow":"\u27FA","DoubleLongRightArrow":"\u27F9","DoubleRightArrow":"\u21D2","DoubleRightTee":"\u22A8","DoubleUpArrow":"\u21D1","DoubleUpDownArrow":"\u21D5","DoubleVerticalBar":"\u2225","DownArrowBar":"\u2913","downarrow":"\u2193","DownArrow":"\u2193","Downarrow":"\u21D3","DownArrowUpArrow":"\u21F5","DownBreve":"\u0311","downdownarrows":"\u21CA","downharpoonleft":"\u21C3","downharpoonright":"\u21C2","DownLeftRightVector":"\u2950","DownLeftTeeVector":"\u295E","DownLeftVectorBar":"\u2956","DownLeftVector":"\u21BD","DownRightTeeVector":"\u295F","DownRightVectorBar":"\u2957","DownRightVector":"\u21C1","DownTeeArrow":"\u21A7","DownTee":"\u22A4","drbkarow":"\u2910","drcorn":"\u231F","drcrop":"\u230C","Dscr":"\uD835\uDC9F","dscr":"\uD835\uDCB9","DScy":"\u0405","dscy":"\u0455","dsol":"\u29F6","Dstrok":"\u0110","dstrok":"\u0111","dtdot":"\u22F1","dtri":"\u25BF","dtrif":"\u25BE","duarr":"\u21F5","duhar":"\u296F","dwangle":"\u29A6","DZcy":"\u040F","dzcy":"\u045F","dzigrarr":"\u27FF","Eacute":"\u00C9","eacute":"\u00E9","easter":"\u2A6E","Ecaron":"\u011A","ecaron":"\u011B","Ecirc":"\u00CA","ecirc":"\u00EA","ecir":"\u2256","ecolon":"\u2255","Ecy":"\u042D","ecy":"\u044D","eDDot":"\u2A77","Edot":"\u0116","edot":"\u0117","eDot":"\u2251","ee":"\u2147","efDot":"\u2252","Efr":"\uD835\uDD08","efr":"\uD835\uDD22","eg":"\u2A9A","Egrave":"\u00C8","egrave":"\u00E8","egs":"\u2A96","egsdot":"\u2A98","el":"\u2A99","Element":"\u2208","elinters":"\u23E7","ell":"\u2113","els":"\u2A95","elsdot":"\u2A97","Emacr":"\u0112","emacr":"\u0113","empty":"\u2205","emptyset":"\u2205","EmptySmallSquare":"\u25FB","emptyv":"\u2205","EmptyVerySmallSquare":"\u25AB","emsp13":"\u2004","emsp14":"\u2005","emsp":"\u2003","ENG":"\u014A","eng":"\u014B","ensp":"\u2002","Eogon":"\u0118","eogon":"\u0119","Eopf":"\uD835\uDD3C","eopf":"\uD835\uDD56","epar":"\u22D5","eparsl":"\u29E3","eplus":"\u2A71","epsi":"\u03B5","Epsilon":"\u0395","epsilon":"\u03B5","epsiv":"\u03F5","eqcirc":"\u2256","eqcolon":"\u2255","eqsim":"\u2242","eqslantgtr":"\u2A96","eqslantless":"\u2A95","Equal":"\u2A75","equals":"=","EqualTilde":"\u2242","equest":"\u225F","Equilibrium":"\u21CC","equiv":"\u2261","equivDD":"\u2A78","eqvparsl":"\u29E5","erarr":"\u2971","erDot":"\u2253","escr":"\u212F","Escr":"\u2130","esdot":"\u2250","Esim":"\u2A73","esim":"\u2242","Eta":"\u0397","eta":"\u03B7","ETH":"\u00D0","eth":"\u00F0","Euml":"\u00CB","euml":"\u00EB","euro":"\u20AC","excl":"!","exist":"\u2203","Exists":"\u2203","expectation":"\u2130","exponentiale":"\u2147","ExponentialE":"\u2147","fallingdotseq":"\u2252","Fcy":"\u0424","fcy":"\u0444","female":"\u2640","ffilig":"\uFB03","fflig":"\uFB00","ffllig":"\uFB04","Ffr":"\uD835\uDD09","ffr":"\uD835\uDD23","filig":"\uFB01","FilledSmallSquare":"\u25FC","FilledVerySmallSquare":"\u25AA","fjlig":"fj","flat":"\u266D","fllig":"\uFB02","fltns":"\u25B1","fnof":"\u0192","Fopf":"\uD835\uDD3D","fopf":"\uD835\uDD57","forall":"\u2200","ForAll":"\u2200","fork":"\u22D4","forkv":"\u2AD9","Fouriertrf":"\u2131","fpartint":"\u2A0D","frac12":"\u00BD","frac13":"\u2153","frac14":"\u00BC","frac15":"\u2155","frac16":"\u2159","frac18":"\u215B","frac23":"\u2154","frac25":"\u2156","frac34":"\u00BE","frac35":"\u2157","frac38":"\u215C","frac45":"\u2158","frac56":"\u215A","frac58":"\u215D","frac78":"\u215E","frasl":"\u2044","frown":"\u2322","fscr":"\uD835\uDCBB","Fscr":"\u2131","gacute":"\u01F5","Gamma":"\u0393","gamma":"\u03B3","Gammad":"\u03DC","gammad":"\u03DD","gap":"\u2A86","Gbreve":"\u011E","gbreve":"\u011F","Gcedil":"\u0122","Gcirc":"\u011C","gcirc":"\u011D","Gcy":"\u0413","gcy":"\u0433","Gdot":"\u0120","gdot":"\u0121","ge":"\u2265","gE":"\u2267","gEl":"\u2A8C","gel":"\u22DB","geq":"\u2265","geqq":"\u2267","geqslant":"\u2A7E","gescc":"\u2AA9","ges":"\u2A7E","gesdot":"\u2A80","gesdoto":"\u2A82","gesdotol":"\u2A84","gesl":"\u22DB\uFE00","gesles":"\u2A94","Gfr":"\uD835\uDD0A","gfr":"\uD835\uDD24","gg":"\u226B","Gg":"\u22D9","ggg":"\u22D9","gimel":"\u2137","GJcy":"\u0403","gjcy":"\u0453","gla":"\u2AA5","gl":"\u2277","glE":"\u2A92","glj":"\u2AA4","gnap":"\u2A8A","gnapprox":"\u2A8A","gne":"\u2A88","gnE":"\u2269","gneq":"\u2A88","gneqq":"\u2269","gnsim":"\u22E7","Gopf":"\uD835\uDD3E","gopf":"\uD835\uDD58","grave":"`","GreaterEqual":"\u2265","GreaterEqualLess":"\u22DB","GreaterFullEqual":"\u2267","GreaterGreater":"\u2AA2","GreaterLess":"\u2277","GreaterSlantEqual":"\u2A7E","GreaterTilde":"\u2273","Gscr":"\uD835\uDCA2","gscr":"\u210A","gsim":"\u2273","gsime":"\u2A8E","gsiml":"\u2A90","gtcc":"\u2AA7","gtcir":"\u2A7A","gt":">","GT":">","Gt":"\u226B","gtdot":"\u22D7","gtlPar":"\u2995","gtquest":"\u2A7C","gtrapprox":"\u2A86","gtrarr":"\u2978","gtrdot":"\u22D7","gtreqless":"\u22DB","gtreqqless":"\u2A8C","gtrless":"\u2277","gtrsim":"\u2273","gvertneqq":"\u2269\uFE00","gvnE":"\u2269\uFE00","Hacek":"\u02C7","hairsp":"\u200A","half":"\u00BD","hamilt":"\u210B","HARDcy":"\u042A","hardcy":"\u044A","harrcir":"\u2948","harr":"\u2194","hArr":"\u21D4","harrw":"\u21AD","Hat":"^","hbar":"\u210F","Hcirc":"\u0124","hcirc":"\u0125","hearts":"\u2665","heartsuit":"\u2665","hellip":"\u2026","hercon":"\u22B9","hfr":"\uD835\uDD25","Hfr":"\u210C","HilbertSpace":"\u210B","hksearow":"\u2925","hkswarow":"\u2926","hoarr":"\u21FF","homtht":"\u223B","hookleftarrow":"\u21A9","hookrightarrow":"\u21AA","hopf":"\uD835\uDD59","Hopf":"\u210D","horbar":"\u2015","HorizontalLine":"\u2500","hscr":"\uD835\uDCBD","Hscr":"\u210B","hslash":"\u210F","Hstrok":"\u0126","hstrok":"\u0127","HumpDownHump":"\u224E","HumpEqual":"\u224F","hybull":"\u2043","hyphen":"\u2010","Iacute":"\u00CD","iacute":"\u00ED","ic":"\u2063","Icirc":"\u00CE","icirc":"\u00EE","Icy":"\u0418","icy":"\u0438","Idot":"\u0130","IEcy":"\u0415","iecy":"\u0435","iexcl":"\u00A1","iff":"\u21D4","ifr":"\uD835\uDD26","Ifr":"\u2111","Igrave":"\u00CC","igrave":"\u00EC","ii":"\u2148","iiiint":"\u2A0C","iiint":"\u222D","iinfin":"\u29DC","iiota":"\u2129","IJlig":"\u0132","ijlig":"\u0133","Imacr":"\u012A","imacr":"\u012B","image":"\u2111","ImaginaryI":"\u2148","imagline":"\u2110","imagpart":"\u2111","imath":"\u0131","Im":"\u2111","imof":"\u22B7","imped":"\u01B5","Implies":"\u21D2","incare":"\u2105","in":"\u2208","infin":"\u221E","infintie":"\u29DD","inodot":"\u0131","intcal":"\u22BA","int":"\u222B","Int":"\u222C","integers":"\u2124","Integral":"\u222B","intercal":"\u22BA","Intersection":"\u22C2","intlarhk":"\u2A17","intprod":"\u2A3C","InvisibleComma":"\u2063","InvisibleTimes":"\u2062","IOcy":"\u0401","iocy":"\u0451","Iogon":"\u012E","iogon":"\u012F","Iopf":"\uD835\uDD40","iopf":"\uD835\uDD5A","Iota":"\u0399","iota":"\u03B9","iprod":"\u2A3C","iquest":"\u00BF","iscr":"\uD835\uDCBE","Iscr":"\u2110","isin":"\u2208","isindot":"\u22F5","isinE":"\u22F9","isins":"\u22F4","isinsv":"\u22F3","isinv":"\u2208","it":"\u2062","Itilde":"\u0128","itilde":"\u0129","Iukcy":"\u0406","iukcy":"\u0456","Iuml":"\u00CF","iuml":"\u00EF","Jcirc":"\u0134","jcirc":"\u0135","Jcy":"\u0419","jcy":"\u0439","Jfr":"\uD835\uDD0D","jfr":"\uD835\uDD27","jmath":"\u0237","Jopf":"\uD835\uDD41","jopf":"\uD835\uDD5B","Jscr":"\uD835\uDCA5","jscr":"\uD835\uDCBF","Jsercy":"\u0408","jsercy":"\u0458","Jukcy":"\u0404","jukcy":"\u0454","Kappa":"\u039A","kappa":"\u03BA","kappav":"\u03F0","Kcedil":"\u0136","kcedil":"\u0137","Kcy":"\u041A","kcy":"\u043A","Kfr":"\uD835\uDD0E","kfr":"\uD835\uDD28","kgreen":"\u0138","KHcy":"\u0425","khcy":"\u0445","KJcy":"\u040C","kjcy":"\u045C","Kopf":"\uD835\uDD42","kopf":"\uD835\uDD5C","Kscr":"\uD835\uDCA6","kscr":"\uD835\uDCC0","lAarr":"\u21DA","Lacute":"\u0139","lacute":"\u013A","laemptyv":"\u29B4","lagran":"\u2112","Lambda":"\u039B","lambda":"\u03BB","lang":"\u27E8","Lang":"\u27EA","langd":"\u2991","langle":"\u27E8","lap":"\u2A85","Laplacetrf":"\u2112","laquo":"\u00AB","larrb":"\u21E4","larrbfs":"\u291F","larr":"\u2190","Larr":"\u219E","lArr":"\u21D0","larrfs":"\u291D","larrhk":"\u21A9","larrlp":"\u21AB","larrpl":"\u2939","larrsim":"\u2973","larrtl":"\u21A2","latail":"\u2919","lAtail":"\u291B","lat":"\u2AAB","late":"\u2AAD","lates":"\u2AAD\uFE00","lbarr":"\u290C","lBarr":"\u290E","lbbrk":"\u2772","lbrace":"{","lbrack":"[","lbrke":"\u298B","lbrksld":"\u298F","lbrkslu":"\u298D","Lcaron":"\u013D","lcaron":"\u013E","Lcedil":"\u013B","lcedil":"\u013C","lceil":"\u2308","lcub":"{","Lcy":"\u041B","lcy":"\u043B","ldca":"\u2936","ldquo":"\u201C","ldquor":"\u201E","ldrdhar":"\u2967","ldrushar":"\u294B","ldsh":"\u21B2","le":"\u2264","lE":"\u2266","LeftAngleBracket":"\u27E8","LeftArrowBar":"\u21E4","leftarrow":"\u2190","LeftArrow":"\u2190","Leftarrow":"\u21D0","LeftArrowRightArrow":"\u21C6","leftarrowtail":"\u21A2","LeftCeiling":"\u2308","LeftDoubleBracket":"\u27E6","LeftDownTeeVector":"\u2961","LeftDownVectorBar":"\u2959","LeftDownVector":"\u21C3","LeftFloor":"\u230A","leftharpoondown":"\u21BD","leftharpoonup":"\u21BC","leftleftarrows":"\u21C7","leftrightarrow":"\u2194","LeftRightArrow":"\u2194","Leftrightarrow":"\u21D4","leftrightarrows":"\u21C6","leftrightharpoons":"\u21CB","leftrightsquigarrow":"\u21AD","LeftRightVector":"\u294E","LeftTeeArrow":"\u21A4","LeftTee":"\u22A3","LeftTeeVector":"\u295A","leftthreetimes":"\u22CB","LeftTriangleBar":"\u29CF","LeftTriangle":"\u22B2","LeftTriangleEqual":"\u22B4","LeftUpDownVector":"\u2951","LeftUpTeeVector":"\u2960","LeftUpVectorBar":"\u2958","LeftUpVector":"\u21BF","LeftVectorBar":"\u2952","LeftVector":"\u21BC","lEg":"\u2A8B","leg":"\u22DA","leq":"\u2264","leqq":"\u2266","leqslant":"\u2A7D","lescc":"\u2AA8","les":"\u2A7D","lesdot":"\u2A7F","lesdoto":"\u2A81","lesdotor":"\u2A83","lesg":"\u22DA\uFE00","lesges":"\u2A93","lessapprox":"\u2A85","lessdot":"\u22D6","lesseqgtr":"\u22DA","lesseqqgtr":"\u2A8B","LessEqualGreater":"\u22DA","LessFullEqual":"\u2266","LessGreater":"\u2276","lessgtr":"\u2276","LessLess":"\u2AA1","lesssim":"\u2272","LessSlantEqual":"\u2A7D","LessTilde":"\u2272","lfisht":"\u297C","lfloor":"\u230A","Lfr":"\uD835\uDD0F","lfr":"\uD835\uDD29","lg":"\u2276","lgE":"\u2A91","lHar":"\u2962","lhard":"\u21BD","lharu":"\u21BC","lharul":"\u296A","lhblk":"\u2584","LJcy":"\u0409","ljcy":"\u0459","llarr":"\u21C7","ll":"\u226A","Ll":"\u22D8","llcorner":"\u231E","Lleftarrow":"\u21DA","llhard":"\u296B","lltri":"\u25FA","Lmidot":"\u013F","lmidot":"\u0140","lmoustache":"\u23B0","lmoust":"\u23B0","lnap":"\u2A89","lnapprox":"\u2A89","lne":"\u2A87","lnE":"\u2268","lneq":"\u2A87","lneqq":"\u2268","lnsim":"\u22E6","loang":"\u27EC","loarr":"\u21FD","lobrk":"\u27E6","longleftarrow":"\u27F5","LongLeftArrow":"\u27F5","Longleftarrow":"\u27F8","longleftrightarrow":"\u27F7","LongLeftRightArrow":"\u27F7","Longleftrightarrow":"\u27FA","longmapsto":"\u27FC","longrightarrow":"\u27F6","LongRightArrow":"\u27F6","Longrightarrow":"\u27F9","looparrowleft":"\u21AB","looparrowright":"\u21AC","lopar":"\u2985","Lopf":"\uD835\uDD43","lopf":"\uD835\uDD5D","loplus":"\u2A2D","lotimes":"\u2A34","lowast":"\u2217","lowbar":"_","LowerLeftArrow":"\u2199","LowerRightArrow":"\u2198","loz":"\u25CA","lozenge":"\u25CA","lozf":"\u29EB","lpar":"(","lparlt":"\u2993","lrarr":"\u21C6","lrcorner":"\u231F","lrhar":"\u21CB","lrhard":"\u296D","lrm":"\u200E","lrtri":"\u22BF","lsaquo":"\u2039","lscr":"\uD835\uDCC1","Lscr":"\u2112","lsh":"\u21B0","Lsh":"\u21B0","lsim":"\u2272","lsime":"\u2A8D","lsimg":"\u2A8F","lsqb":"[","lsquo":"\u2018","lsquor":"\u201A","Lstrok":"\u0141","lstrok":"\u0142","ltcc":"\u2AA6","ltcir":"\u2A79","lt":"<","LT":"<","Lt":"\u226A","ltdot":"\u22D6","lthree":"\u22CB","ltimes":"\u22C9","ltlarr":"\u2976","ltquest":"\u2A7B","ltri":"\u25C3","ltrie":"\u22B4","ltrif":"\u25C2","ltrPar":"\u2996","lurdshar":"\u294A","luruhar":"\u2966","lvertneqq":"\u2268\uFE00","lvnE":"\u2268\uFE00","macr":"\u00AF","male":"\u2642","malt":"\u2720","maltese":"\u2720","Map":"\u2905","map":"\u21A6","mapsto":"\u21A6","mapstodown":"\u21A7","mapstoleft":"\u21A4","mapstoup":"\u21A5","marker":"\u25AE","mcomma":"\u2A29","Mcy":"\u041C","mcy":"\u043C","mdash":"\u2014","mDDot":"\u223A","measuredangle":"\u2221","MediumSpace":"\u205F","Mellintrf":"\u2133","Mfr":"\uD835\uDD10","mfr":"\uD835\uDD2A","mho":"\u2127","micro":"\u00B5","midast":"*","midcir":"\u2AF0","mid":"\u2223","middot":"\u00B7","minusb":"\u229F","minus":"\u2212","minusd":"\u2238","minusdu":"\u2A2A","MinusPlus":"\u2213","mlcp":"\u2ADB","mldr":"\u2026","mnplus":"\u2213","models":"\u22A7","Mopf":"\uD835\uDD44","mopf":"\uD835\uDD5E","mp":"\u2213","mscr":"\uD835\uDCC2","Mscr":"\u2133","mstpos":"\u223E","Mu":"\u039C","mu":"\u03BC","multimap":"\u22B8","mumap":"\u22B8","nabla":"\u2207","Nacute":"\u0143","nacute":"\u0144","nang":"\u2220\u20D2","nap":"\u2249","napE":"\u2A70\u0338","napid":"\u224B\u0338","napos":"\u0149","napprox":"\u2249","natural":"\u266E","naturals":"\u2115","natur":"\u266E","nbsp":"\u00A0","nbump":"\u224E\u0338","nbumpe":"\u224F\u0338","ncap":"\u2A43","Ncaron":"\u0147","ncaron":"\u0148","Ncedil":"\u0145","ncedil":"\u0146","ncong":"\u2247","ncongdot":"\u2A6D\u0338","ncup":"\u2A42","Ncy":"\u041D","ncy":"\u043D","ndash":"\u2013","nearhk":"\u2924","nearr":"\u2197","neArr":"\u21D7","nearrow":"\u2197","ne":"\u2260","nedot":"\u2250\u0338","NegativeMediumSpace":"\u200B","NegativeThickSpace":"\u200B","NegativeThinSpace":"\u200B","NegativeVeryThinSpace":"\u200B","nequiv":"\u2262","nesear":"\u2928","nesim":"\u2242\u0338","NestedGreaterGreater":"\u226B","NestedLessLess":"\u226A","NewLine":"\n","nexist":"\u2204","nexists":"\u2204","Nfr":"\uD835\uDD11","nfr":"\uD835\uDD2B","ngE":"\u2267\u0338","nge":"\u2271","ngeq":"\u2271","ngeqq":"\u2267\u0338","ngeqslant":"\u2A7E\u0338","nges":"\u2A7E\u0338","nGg":"\u22D9\u0338","ngsim":"\u2275","nGt":"\u226B\u20D2","ngt":"\u226F","ngtr":"\u226F","nGtv":"\u226B\u0338","nharr":"\u21AE","nhArr":"\u21CE","nhpar":"\u2AF2","ni":"\u220B","nis":"\u22FC","nisd":"\u22FA","niv":"\u220B","NJcy":"\u040A","njcy":"\u045A","nlarr":"\u219A","nlArr":"\u21CD","nldr":"\u2025","nlE":"\u2266\u0338","nle":"\u2270","nleftarrow":"\u219A","nLeftarrow":"\u21CD","nleftrightarrow":"\u21AE","nLeftrightarrow":"\u21CE","nleq":"\u2270","nleqq":"\u2266\u0338","nleqslant":"\u2A7D\u0338","nles":"\u2A7D\u0338","nless":"\u226E","nLl":"\u22D8\u0338","nlsim":"\u2274","nLt":"\u226A\u20D2","nlt":"\u226E","nltri":"\u22EA","nltrie":"\u22EC","nLtv":"\u226A\u0338","nmid":"\u2224","NoBreak":"\u2060","NonBreakingSpace":"\u00A0","nopf":"\uD835\uDD5F","Nopf":"\u2115","Not":"\u2AEC","not":"\u00AC","NotCongruent":"\u2262","NotCupCap":"\u226D","NotDoubleVerticalBar":"\u2226","NotElement":"\u2209","NotEqual":"\u2260","NotEqualTilde":"\u2242\u0338","NotExists":"\u2204","NotGreater":"\u226F","NotGreaterEqual":"\u2271","NotGreaterFullEqual":"\u2267\u0338","NotGreaterGreater":"\u226B\u0338","NotGreaterLess":"\u2279","NotGreaterSlantEqual":"\u2A7E\u0338","NotGreaterTilde":"\u2275","NotHumpDownHump":"\u224E\u0338","NotHumpEqual":"\u224F\u0338","notin":"\u2209","notindot":"\u22F5\u0338","notinE":"\u22F9\u0338","notinva":"\u2209","notinvb":"\u22F7","notinvc":"\u22F6","NotLeftTriangleBar":"\u29CF\u0338","NotLeftTriangle":"\u22EA","NotLeftTriangleEqual":"\u22EC","NotLess":"\u226E","NotLessEqual":"\u2270","NotLessGreater":"\u2278","NotLessLess":"\u226A\u0338","NotLessSlantEqual":"\u2A7D\u0338","NotLessTilde":"\u2274","NotNestedGreaterGreater":"\u2AA2\u0338","NotNestedLessLess":"\u2AA1\u0338","notni":"\u220C","notniva":"\u220C","notnivb":"\u22FE","notnivc":"\u22FD","NotPrecedes":"\u2280","NotPrecedesEqual":"\u2AAF\u0338","NotPrecedesSlantEqual":"\u22E0","NotReverseElement":"\u220C","NotRightTriangleBar":"\u29D0\u0338","NotRightTriangle":"\u22EB","NotRightTriangleEqual":"\u22ED","NotSquareSubset":"\u228F\u0338","NotSquareSubsetEqual":"\u22E2","NotSquareSuperset":"\u2290\u0338","NotSquareSupersetEqual":"\u22E3","NotSubset":"\u2282\u20D2","NotSubsetEqual":"\u2288","NotSucceeds":"\u2281","NotSucceedsEqual":"\u2AB0\u0338","NotSucceedsSlantEqual":"\u22E1","NotSucceedsTilde":"\u227F\u0338","NotSuperset":"\u2283\u20D2","NotSupersetEqual":"\u2289","NotTilde":"\u2241","NotTildeEqual":"\u2244","NotTildeFullEqual":"\u2247","NotTildeTilde":"\u2249","NotVerticalBar":"\u2224","nparallel":"\u2226","npar":"\u2226","nparsl":"\u2AFD\u20E5","npart":"\u2202\u0338","npolint":"\u2A14","npr":"\u2280","nprcue":"\u22E0","nprec":"\u2280","npreceq":"\u2AAF\u0338","npre":"\u2AAF\u0338","nrarrc":"\u2933\u0338","nrarr":"\u219B","nrArr":"\u21CF","nrarrw":"\u219D\u0338","nrightarrow":"\u219B","nRightarrow":"\u21CF","nrtri":"\u22EB","nrtrie":"\u22ED","nsc":"\u2281","nsccue":"\u22E1","nsce":"\u2AB0\u0338","Nscr":"\uD835\uDCA9","nscr":"\uD835\uDCC3","nshortmid":"\u2224","nshortparallel":"\u2226","nsim":"\u2241","nsime":"\u2244","nsimeq":"\u2244","nsmid":"\u2224","nspar":"\u2226","nsqsube":"\u22E2","nsqsupe":"\u22E3","nsub":"\u2284","nsubE":"\u2AC5\u0338","nsube":"\u2288","nsubset":"\u2282\u20D2","nsubseteq":"\u2288","nsubseteqq":"\u2AC5\u0338","nsucc":"\u2281","nsucceq":"\u2AB0\u0338","nsup":"\u2285","nsupE":"\u2AC6\u0338","nsupe":"\u2289","nsupset":"\u2283\u20D2","nsupseteq":"\u2289","nsupseteqq":"\u2AC6\u0338","ntgl":"\u2279","Ntilde":"\u00D1","ntilde":"\u00F1","ntlg":"\u2278","ntriangleleft":"\u22EA","ntrianglelefteq":"\u22EC","ntriangleright":"\u22EB","ntrianglerighteq":"\u22ED","Nu":"\u039D","nu":"\u03BD","num":"#","numero":"\u2116","numsp":"\u2007","nvap":"\u224D\u20D2","nvdash":"\u22AC","nvDash":"\u22AD","nVdash":"\u22AE","nVDash":"\u22AF","nvge":"\u2265\u20D2","nvgt":">\u20D2","nvHarr":"\u2904","nvinfin":"\u29DE","nvlArr":"\u2902","nvle":"\u2264\u20D2","nvlt":"<\u20D2","nvltrie":"\u22B4\u20D2","nvrArr":"\u2903","nvrtrie":"\u22B5\u20D2","nvsim":"\u223C\u20D2","nwarhk":"\u2923","nwarr":"\u2196","nwArr":"\u21D6","nwarrow":"\u2196","nwnear":"\u2927","Oacute":"\u00D3","oacute":"\u00F3","oast":"\u229B","Ocirc":"\u00D4","ocirc":"\u00F4","ocir":"\u229A","Ocy":"\u041E","ocy":"\u043E","odash":"\u229D","Odblac":"\u0150","odblac":"\u0151","odiv":"\u2A38","odot":"\u2299","odsold":"\u29BC","OElig":"\u0152","oelig":"\u0153","ofcir":"\u29BF","Ofr":"\uD835\uDD12","ofr":"\uD835\uDD2C","ogon":"\u02DB","Ograve":"\u00D2","ograve":"\u00F2","ogt":"\u29C1","ohbar":"\u29B5","ohm":"\u03A9","oint":"\u222E","olarr":"\u21BA","olcir":"\u29BE","olcross":"\u29BB","oline":"\u203E","olt":"\u29C0","Omacr":"\u014C","omacr":"\u014D","Omega":"\u03A9","omega":"\u03C9","Omicron":"\u039F","omicron":"\u03BF","omid":"\u29B6","ominus":"\u2296","Oopf":"\uD835\uDD46","oopf":"\uD835\uDD60","opar":"\u29B7","OpenCurlyDoubleQuote":"\u201C","OpenCurlyQuote":"\u2018","operp":"\u29B9","oplus":"\u2295","orarr":"\u21BB","Or":"\u2A54","or":"\u2228","ord":"\u2A5D","order":"\u2134","orderof":"\u2134","ordf":"\u00AA","ordm":"\u00BA","origof":"\u22B6","oror":"\u2A56","orslope":"\u2A57","orv":"\u2A5B","oS":"\u24C8","Oscr":"\uD835\uDCAA","oscr":"\u2134","Oslash":"\u00D8","oslash":"\u00F8","osol":"\u2298","Otilde":"\u00D5","otilde":"\u00F5","otimesas":"\u2A36","Otimes":"\u2A37","otimes":"\u2297","Ouml":"\u00D6","ouml":"\u00F6","ovbar":"\u233D","OverBar":"\u203E","OverBrace":"\u23DE","OverBracket":"\u23B4","OverParenthesis":"\u23DC","para":"\u00B6","parallel":"\u2225","par":"\u2225","parsim":"\u2AF3","parsl":"\u2AFD","part":"\u2202","PartialD":"\u2202","Pcy":"\u041F","pcy":"\u043F","percnt":"%","period":".","permil":"\u2030","perp":"\u22A5","pertenk":"\u2031","Pfr":"\uD835\uDD13","pfr":"\uD835\uDD2D","Phi":"\u03A6","phi":"\u03C6","phiv":"\u03D5","phmmat":"\u2133","phone":"\u260E","Pi":"\u03A0","pi":"\u03C0","pitchfork":"\u22D4","piv":"\u03D6","planck":"\u210F","planckh":"\u210E","plankv":"\u210F","plusacir":"\u2A23","plusb":"\u229E","pluscir":"\u2A22","plus":"+","plusdo":"\u2214","plusdu":"\u2A25","pluse":"\u2A72","PlusMinus":"\u00B1","plusmn":"\u00B1","plussim":"\u2A26","plustwo":"\u2A27","pm":"\u00B1","Poincareplane":"\u210C","pointint":"\u2A15","popf":"\uD835\uDD61","Popf":"\u2119","pound":"\u00A3","prap":"\u2AB7","Pr":"\u2ABB","pr":"\u227A","prcue":"\u227C","precapprox":"\u2AB7","prec":"\u227A","preccurlyeq":"\u227C","Precedes":"\u227A","PrecedesEqual":"\u2AAF","PrecedesSlantEqual":"\u227C","PrecedesTilde":"\u227E","preceq":"\u2AAF","precnapprox":"\u2AB9","precneqq":"\u2AB5","precnsim":"\u22E8","pre":"\u2AAF","prE":"\u2AB3","precsim":"\u227E","prime":"\u2032","Prime":"\u2033","primes":"\u2119","prnap":"\u2AB9","prnE":"\u2AB5","prnsim":"\u22E8","prod":"\u220F","Product":"\u220F","profalar":"\u232E","profline":"\u2312","profsurf":"\u2313","prop":"\u221D","Proportional":"\u221D","Proportion":"\u2237","propto":"\u221D","prsim":"\u227E","prurel":"\u22B0","Pscr":"\uD835\uDCAB","pscr":"\uD835\uDCC5","Psi":"\u03A8","psi":"\u03C8","puncsp":"\u2008","Qfr":"\uD835\uDD14","qfr":"\uD835\uDD2E","qint":"\u2A0C","qopf":"\uD835\uDD62","Qopf":"\u211A","qprime":"\u2057","Qscr":"\uD835\uDCAC","qscr":"\uD835\uDCC6","quaternions":"\u210D","quatint":"\u2A16","quest":"?","questeq":"\u225F","quot":"\"","QUOT":"\"","rAarr":"\u21DB","race":"\u223D\u0331","Racute":"\u0154","racute":"\u0155","radic":"\u221A","raemptyv":"\u29B3","rang":"\u27E9","Rang":"\u27EB","rangd":"\u2992","range":"\u29A5","rangle":"\u27E9","raquo":"\u00BB","rarrap":"\u2975","rarrb":"\u21E5","rarrbfs":"\u2920","rarrc":"\u2933","rarr":"\u2192","Rarr":"\u21A0","rArr":"\u21D2","rarrfs":"\u291E","rarrhk":"\u21AA","rarrlp":"\u21AC","rarrpl":"\u2945","rarrsim":"\u2974","Rarrtl":"\u2916","rarrtl":"\u21A3","rarrw":"\u219D","ratail":"\u291A","rAtail":"\u291C","ratio":"\u2236","rationals":"\u211A","rbarr":"\u290D","rBarr":"\u290F","RBarr":"\u2910","rbbrk":"\u2773","rbrace":"}","rbrack":"]","rbrke":"\u298C","rbrksld":"\u298E","rbrkslu":"\u2990","Rcaron":"\u0158","rcaron":"\u0159","Rcedil":"\u0156","rcedil":"\u0157","rceil":"\u2309","rcub":"}","Rcy":"\u0420","rcy":"\u0440","rdca":"\u2937","rdldhar":"\u2969","rdquo":"\u201D","rdquor":"\u201D","rdsh":"\u21B3","real":"\u211C","realine":"\u211B","realpart":"\u211C","reals":"\u211D","Re":"\u211C","rect":"\u25AD","reg":"\u00AE","REG":"\u00AE","ReverseElement":"\u220B","ReverseEquilibrium":"\u21CB","ReverseUpEquilibrium":"\u296F","rfisht":"\u297D","rfloor":"\u230B","rfr":"\uD835\uDD2F","Rfr":"\u211C","rHar":"\u2964","rhard":"\u21C1","rharu":"\u21C0","rharul":"\u296C","Rho":"\u03A1","rho":"\u03C1","rhov":"\u03F1","RightAngleBracket":"\u27E9","RightArrowBar":"\u21E5","rightarrow":"\u2192","RightArrow":"\u2192","Rightarrow":"\u21D2","RightArrowLeftArrow":"\u21C4","rightarrowtail":"\u21A3","RightCeiling":"\u2309","RightDoubleBracket":"\u27E7","RightDownTeeVector":"\u295D","RightDownVectorBar":"\u2955","RightDownVector":"\u21C2","RightFloor":"\u230B","rightharpoondown":"\u21C1","rightharpoonup":"\u21C0","rightleftarrows":"\u21C4","rightleftharpoons":"\u21CC","rightrightarrows":"\u21C9","rightsquigarrow":"\u219D","RightTeeArrow":"\u21A6","RightTee":"\u22A2","RightTeeVector":"\u295B","rightthreetimes":"\u22CC","RightTriangleBar":"\u29D0","RightTriangle":"\u22B3","RightTriangleEqual":"\u22B5","RightUpDownVector":"\u294F","RightUpTeeVector":"\u295C","RightUpVectorBar":"\u2954","RightUpVector":"\u21BE","RightVectorBar":"\u2953","RightVector":"\u21C0","ring":"\u02DA","risingdotseq":"\u2253","rlarr":"\u21C4","rlhar":"\u21CC","rlm":"\u200F","rmoustache":"\u23B1","rmoust":"\u23B1","rnmid":"\u2AEE","roang":"\u27ED","roarr":"\u21FE","robrk":"\u27E7","ropar":"\u2986","ropf":"\uD835\uDD63","Ropf":"\u211D","roplus":"\u2A2E","rotimes":"\u2A35","RoundImplies":"\u2970","rpar":")","rpargt":"\u2994","rppolint":"\u2A12","rrarr":"\u21C9","Rrightarrow":"\u21DB","rsaquo":"\u203A","rscr":"\uD835\uDCC7","Rscr":"\u211B","rsh":"\u21B1","Rsh":"\u21B1","rsqb":"]","rsquo":"\u2019","rsquor":"\u2019","rthree":"\u22CC","rtimes":"\u22CA","rtri":"\u25B9","rtrie":"\u22B5","rtrif":"\u25B8","rtriltri":"\u29CE","RuleDelayed":"\u29F4","ruluhar":"\u2968","rx":"\u211E","Sacute":"\u015A","sacute":"\u015B","sbquo":"\u201A","scap":"\u2AB8","Scaron":"\u0160","scaron":"\u0161","Sc":"\u2ABC","sc":"\u227B","sccue":"\u227D","sce":"\u2AB0","scE":"\u2AB4","Scedil":"\u015E","scedil":"\u015F","Scirc":"\u015C","scirc":"\u015D","scnap":"\u2ABA","scnE":"\u2AB6","scnsim":"\u22E9","scpolint":"\u2A13","scsim":"\u227F","Scy":"\u0421","scy":"\u0441","sdotb":"\u22A1","sdot":"\u22C5","sdote":"\u2A66","searhk":"\u2925","searr":"\u2198","seArr":"\u21D8","searrow":"\u2198","sect":"\u00A7","semi":";","seswar":"\u2929","setminus":"\u2216","setmn":"\u2216","sext":"\u2736","Sfr":"\uD835\uDD16","sfr":"\uD835\uDD30","sfrown":"\u2322","sharp":"\u266F","SHCHcy":"\u0429","shchcy":"\u0449","SHcy":"\u0428","shcy":"\u0448","ShortDownArrow":"\u2193","ShortLeftArrow":"\u2190","shortmid":"\u2223","shortparallel":"\u2225","ShortRightArrow":"\u2192","ShortUpArrow":"\u2191","shy":"\u00AD","Sigma":"\u03A3","sigma":"\u03C3","sigmaf":"\u03C2","sigmav":"\u03C2","sim":"\u223C","simdot":"\u2A6A","sime":"\u2243","simeq":"\u2243","simg":"\u2A9E","simgE":"\u2AA0","siml":"\u2A9D","simlE":"\u2A9F","simne":"\u2246","simplus":"\u2A24","simrarr":"\u2972","slarr":"\u2190","SmallCircle":"\u2218","smallsetminus":"\u2216","smashp":"\u2A33","smeparsl":"\u29E4","smid":"\u2223","smile":"\u2323","smt":"\u2AAA","smte":"\u2AAC","smtes":"\u2AAC\uFE00","SOFTcy":"\u042C","softcy":"\u044C","solbar":"\u233F","solb":"\u29C4","sol":"/","Sopf":"\uD835\uDD4A","sopf":"\uD835\uDD64","spades":"\u2660","spadesuit":"\u2660","spar":"\u2225","sqcap":"\u2293","sqcaps":"\u2293\uFE00","sqcup":"\u2294","sqcups":"\u2294\uFE00","Sqrt":"\u221A","sqsub":"\u228F","sqsube":"\u2291","sqsubset":"\u228F","sqsubseteq":"\u2291","sqsup":"\u2290","sqsupe":"\u2292","sqsupset":"\u2290","sqsupseteq":"\u2292","square":"\u25A1","Square":"\u25A1","SquareIntersection":"\u2293","SquareSubset":"\u228F","SquareSubsetEqual":"\u2291","SquareSuperset":"\u2290","SquareSupersetEqual":"\u2292","SquareUnion":"\u2294","squarf":"\u25AA","squ":"\u25A1","squf":"\u25AA","srarr":"\u2192","Sscr":"\uD835\uDCAE","sscr":"\uD835\uDCC8","ssetmn":"\u2216","ssmile":"\u2323","sstarf":"\u22C6","Star":"\u22C6","star":"\u2606","starf":"\u2605","straightepsilon":"\u03F5","straightphi":"\u03D5","strns":"\u00AF","sub":"\u2282","Sub":"\u22D0","subdot":"\u2ABD","subE":"\u2AC5","sube":"\u2286","subedot":"\u2AC3","submult":"\u2AC1","subnE":"\u2ACB","subne":"\u228A","subplus":"\u2ABF","subrarr":"\u2979","subset":"\u2282","Subset":"\u22D0","subseteq":"\u2286","subseteqq":"\u2AC5","SubsetEqual":"\u2286","subsetneq":"\u228A","subsetneqq":"\u2ACB","subsim":"\u2AC7","subsub":"\u2AD5","subsup":"\u2AD3","succapprox":"\u2AB8","succ":"\u227B","succcurlyeq":"\u227D","Succeeds":"\u227B","SucceedsEqual":"\u2AB0","SucceedsSlantEqual":"\u227D","SucceedsTilde":"\u227F","succeq":"\u2AB0","succnapprox":"\u2ABA","succneqq":"\u2AB6","succnsim":"\u22E9","succsim":"\u227F","SuchThat":"\u220B","sum":"\u2211","Sum":"\u2211","sung":"\u266A","sup1":"\u00B9","sup2":"\u00B2","sup3":"\u00B3","sup":"\u2283","Sup":"\u22D1","supdot":"\u2ABE","supdsub":"\u2AD8","supE":"\u2AC6","supe":"\u2287","supedot":"\u2AC4","Superset":"\u2283","SupersetEqual":"\u2287","suphsol":"\u27C9","suphsub":"\u2AD7","suplarr":"\u297B","supmult":"\u2AC2","supnE":"\u2ACC","supne":"\u228B","supplus":"\u2AC0","supset":"\u2283","Supset":"\u22D1","supseteq":"\u2287","supseteqq":"\u2AC6","supsetneq":"\u228B","supsetneqq":"\u2ACC","supsim":"\u2AC8","supsub":"\u2AD4","supsup":"\u2AD6","swarhk":"\u2926","swarr":"\u2199","swArr":"\u21D9","swarrow":"\u2199","swnwar":"\u292A","szlig":"\u00DF","Tab":"\t","target":"\u2316","Tau":"\u03A4","tau":"\u03C4","tbrk":"\u23B4","Tcaron":"\u0164","tcaron":"\u0165","Tcedil":"\u0162","tcedil":"\u0163","Tcy":"\u0422","tcy":"\u0442","tdot":"\u20DB","telrec":"\u2315","Tfr":"\uD835\uDD17","tfr":"\uD835\uDD31","there4":"\u2234","therefore":"\u2234","Therefore":"\u2234","Theta":"\u0398","theta":"\u03B8","thetasym":"\u03D1","thetav":"\u03D1","thickapprox":"\u2248","thicksim":"\u223C","ThickSpace":"\u205F\u200A","ThinSpace":"\u2009","thinsp":"\u2009","thkap":"\u2248","thksim":"\u223C","THORN":"\u00DE","thorn":"\u00FE","tilde":"\u02DC","Tilde":"\u223C","TildeEqual":"\u2243","TildeFullEqual":"\u2245","TildeTilde":"\u2248","timesbar":"\u2A31","timesb":"\u22A0","times":"\u00D7","timesd":"\u2A30","tint":"\u222D","toea":"\u2928","topbot":"\u2336","topcir":"\u2AF1","top":"\u22A4","Topf":"\uD835\uDD4B","topf":"\uD835\uDD65","topfork":"\u2ADA","tosa":"\u2929","tprime":"\u2034","trade":"\u2122","TRADE":"\u2122","triangle":"\u25B5","triangledown":"\u25BF","triangleleft":"\u25C3","trianglelefteq":"\u22B4","triangleq":"\u225C","triangleright":"\u25B9","trianglerighteq":"\u22B5","tridot":"\u25EC","trie":"\u225C","triminus":"\u2A3A","TripleDot":"\u20DB","triplus":"\u2A39","trisb":"\u29CD","tritime":"\u2A3B","trpezium":"\u23E2","Tscr":"\uD835\uDCAF","tscr":"\uD835\uDCC9","TScy":"\u0426","tscy":"\u0446","TSHcy":"\u040B","tshcy":"\u045B","Tstrok":"\u0166","tstrok":"\u0167","twixt":"\u226C","twoheadleftarrow":"\u219E","twoheadrightarrow":"\u21A0","Uacute":"\u00DA","uacute":"\u00FA","uarr":"\u2191","Uarr":"\u219F","uArr":"\u21D1","Uarrocir":"\u2949","Ubrcy":"\u040E","ubrcy":"\u045E","Ubreve":"\u016C","ubreve":"\u016D","Ucirc":"\u00DB","ucirc":"\u00FB","Ucy":"\u0423","ucy":"\u0443","udarr":"\u21C5","Udblac":"\u0170","udblac":"\u0171","udhar":"\u296E","ufisht":"\u297E","Ufr":"\uD835\uDD18","ufr":"\uD835\uDD32","Ugrave":"\u00D9","ugrave":"\u00F9","uHar":"\u2963","uharl":"\u21BF","uharr":"\u21BE","uhblk":"\u2580","ulcorn":"\u231C","ulcorner":"\u231C","ulcrop":"\u230F","ultri":"\u25F8","Umacr":"\u016A","umacr":"\u016B","uml":"\u00A8","UnderBar":"_","UnderBrace":"\u23DF","UnderBracket":"\u23B5","UnderParenthesis":"\u23DD","Union":"\u22C3","UnionPlus":"\u228E","Uogon":"\u0172","uogon":"\u0173","Uopf":"\uD835\uDD4C","uopf":"\uD835\uDD66","UpArrowBar":"\u2912","uparrow":"\u2191","UpArrow":"\u2191","Uparrow":"\u21D1","UpArrowDownArrow":"\u21C5","updownarrow":"\u2195","UpDownArrow":"\u2195","Updownarrow":"\u21D5","UpEquilibrium":"\u296E","upharpoonleft":"\u21BF","upharpoonright":"\u21BE","uplus":"\u228E","UpperLeftArrow":"\u2196","UpperRightArrow":"\u2197","upsi":"\u03C5","Upsi":"\u03D2","upsih":"\u03D2","Upsilon":"\u03A5","upsilon":"\u03C5","UpTeeArrow":"\u21A5","UpTee":"\u22A5","upuparrows":"\u21C8","urcorn":"\u231D","urcorner":"\u231D","urcrop":"\u230E","Uring":"\u016E","uring":"\u016F","urtri":"\u25F9","Uscr":"\uD835\uDCB0","uscr":"\uD835\uDCCA","utdot":"\u22F0","Utilde":"\u0168","utilde":"\u0169","utri":"\u25B5","utrif":"\u25B4","uuarr":"\u21C8","Uuml":"\u00DC","uuml":"\u00FC","uwangle":"\u29A7","vangrt":"\u299C","varepsilon":"\u03F5","varkappa":"\u03F0","varnothing":"\u2205","varphi":"\u03D5","varpi":"\u03D6","varpropto":"\u221D","varr":"\u2195","vArr":"\u21D5","varrho":"\u03F1","varsigma":"\u03C2","varsubsetneq":"\u228A\uFE00","varsubsetneqq":"\u2ACB\uFE00","varsupsetneq":"\u228B\uFE00","varsupsetneqq":"\u2ACC\uFE00","vartheta":"\u03D1","vartriangleleft":"\u22B2","vartriangleright":"\u22B3","vBar":"\u2AE8","Vbar":"\u2AEB","vBarv":"\u2AE9","Vcy":"\u0412","vcy":"\u0432","vdash":"\u22A2","vDash":"\u22A8","Vdash":"\u22A9","VDash":"\u22AB","Vdashl":"\u2AE6","veebar":"\u22BB","vee":"\u2228","Vee":"\u22C1","veeeq":"\u225A","vellip":"\u22EE","verbar":"|","Verbar":"\u2016","vert":"|","Vert":"\u2016","VerticalBar":"\u2223","VerticalLine":"|","VerticalSeparator":"\u2758","VerticalTilde":"\u2240","VeryThinSpace":"\u200A","Vfr":"\uD835\uDD19","vfr":"\uD835\uDD33","vltri":"\u22B2","vnsub":"\u2282\u20D2","vnsup":"\u2283\u20D2","Vopf":"\uD835\uDD4D","vopf":"\uD835\uDD67","vprop":"\u221D","vrtri":"\u22B3","Vscr":"\uD835\uDCB1","vscr":"\uD835\uDCCB","vsubnE":"\u2ACB\uFE00","vsubne":"\u228A\uFE00","vsupnE":"\u2ACC\uFE00","vsupne":"\u228B\uFE00","Vvdash":"\u22AA","vzigzag":"\u299A","Wcirc":"\u0174","wcirc":"\u0175","wedbar":"\u2A5F","wedge":"\u2227","Wedge":"\u22C0","wedgeq":"\u2259","weierp":"\u2118","Wfr":"\uD835\uDD1A","wfr":"\uD835\uDD34","Wopf":"\uD835\uDD4E","wopf":"\uD835\uDD68","wp":"\u2118","wr":"\u2240","wreath":"\u2240","Wscr":"\uD835\uDCB2","wscr":"\uD835\uDCCC","xcap":"\u22C2","xcirc":"\u25EF","xcup":"\u22C3","xdtri":"\u25BD","Xfr":"\uD835\uDD1B","xfr":"\uD835\uDD35","xharr":"\u27F7","xhArr":"\u27FA","Xi":"\u039E","xi":"\u03BE","xlarr":"\u27F5","xlArr":"\u27F8","xmap":"\u27FC","xnis":"\u22FB","xodot":"\u2A00","Xopf":"\uD835\uDD4F","xopf":"\uD835\uDD69","xoplus":"\u2A01","xotime":"\u2A02","xrarr":"\u27F6","xrArr":"\u27F9","Xscr":"\uD835\uDCB3","xscr":"\uD835\uDCCD","xsqcup":"\u2A06","xuplus":"\u2A04","xutri":"\u25B3","xvee":"\u22C1","xwedge":"\u22C0","Yacute":"\u00DD","yacute":"\u00FD","YAcy":"\u042F","yacy":"\u044F","Ycirc":"\u0176","ycirc":"\u0177","Ycy":"\u042B","ycy":"\u044B","yen":"\u00A5","Yfr":"\uD835\uDD1C","yfr":"\uD835\uDD36","YIcy":"\u0407","yicy":"\u0457","Yopf":"\uD835\uDD50","yopf":"\uD835\uDD6A","Yscr":"\uD835\uDCB4","yscr":"\uD835\uDCCE","YUcy":"\u042E","yucy":"\u044E","yuml":"\u00FF","Yuml":"\u0178","Zacute":"\u0179","zacute":"\u017A","Zcaron":"\u017D","zcaron":"\u017E","Zcy":"\u0417","zcy":"\u0437","Zdot":"\u017B","zdot":"\u017C","zeetrf":"\u2128","ZeroWidthSpace":"\u200B","Zeta":"\u0396","zeta":"\u03B6","zfr":"\uD835\uDD37","Zfr":"\u2128","ZHcy":"\u0416","zhcy":"\u0436","zigrarr":"\u21DD","zopf":"\uD835\uDD6B","Zopf":"\u2124","Zscr":"\uD835\uDCB5","zscr":"\uD835\uDCCF","zwj":"\u200D","zwnj":"\u200C"} |
New file |
| | |
| | | {"Aacute":"\u00C1","aacute":"\u00E1","Acirc":"\u00C2","acirc":"\u00E2","acute":"\u00B4","AElig":"\u00C6","aelig":"\u00E6","Agrave":"\u00C0","agrave":"\u00E0","amp":"&","AMP":"&","Aring":"\u00C5","aring":"\u00E5","Atilde":"\u00C3","atilde":"\u00E3","Auml":"\u00C4","auml":"\u00E4","brvbar":"\u00A6","Ccedil":"\u00C7","ccedil":"\u00E7","cedil":"\u00B8","cent":"\u00A2","copy":"\u00A9","COPY":"\u00A9","curren":"\u00A4","deg":"\u00B0","divide":"\u00F7","Eacute":"\u00C9","eacute":"\u00E9","Ecirc":"\u00CA","ecirc":"\u00EA","Egrave":"\u00C8","egrave":"\u00E8","ETH":"\u00D0","eth":"\u00F0","Euml":"\u00CB","euml":"\u00EB","frac12":"\u00BD","frac14":"\u00BC","frac34":"\u00BE","gt":">","GT":">","Iacute":"\u00CD","iacute":"\u00ED","Icirc":"\u00CE","icirc":"\u00EE","iexcl":"\u00A1","Igrave":"\u00CC","igrave":"\u00EC","iquest":"\u00BF","Iuml":"\u00CF","iuml":"\u00EF","laquo":"\u00AB","lt":"<","LT":"<","macr":"\u00AF","micro":"\u00B5","middot":"\u00B7","nbsp":"\u00A0","not":"\u00AC","Ntilde":"\u00D1","ntilde":"\u00F1","Oacute":"\u00D3","oacute":"\u00F3","Ocirc":"\u00D4","ocirc":"\u00F4","Ograve":"\u00D2","ograve":"\u00F2","ordf":"\u00AA","ordm":"\u00BA","Oslash":"\u00D8","oslash":"\u00F8","Otilde":"\u00D5","otilde":"\u00F5","Ouml":"\u00D6","ouml":"\u00F6","para":"\u00B6","plusmn":"\u00B1","pound":"\u00A3","quot":"\"","QUOT":"\"","raquo":"\u00BB","reg":"\u00AE","REG":"\u00AE","sect":"\u00A7","shy":"\u00AD","sup1":"\u00B9","sup2":"\u00B2","sup3":"\u00B3","szlig":"\u00DF","THORN":"\u00DE","thorn":"\u00FE","times":"\u00D7","Uacute":"\u00DA","uacute":"\u00FA","Ucirc":"\u00DB","ucirc":"\u00FB","Ugrave":"\u00D9","ugrave":"\u00F9","uml":"\u00A8","Uuml":"\u00DC","uuml":"\u00FC","Yacute":"\u00DD","yacute":"\u00FD","yen":"\u00A5","yuml":"\u00FF"} |
New file |
| | |
| | | {"amp":"&","apos":"'","gt":">","lt":"<","quot":"\""} |
New file |
| | |
| | | { |
| | | "_from": "entities@^1.1.1", |
| | | "_id": "entities@1.1.2", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", |
| | | "_location": "/entities", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "range", |
| | | "registry": true, |
| | | "raw": "entities@^1.1.1", |
| | | "name": "entities", |
| | | "escapedName": "entities", |
| | | "rawSpec": "^1.1.1", |
| | | "saveSpec": null, |
| | | "fetchSpec": "^1.1.1" |
| | | }, |
| | | "_requiredBy": [ |
| | | "/mini-html-parser2" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", |
| | | "_shasum": "bdfa735299664dfafd34529ed4f8522a275fea56", |
| | | "_spec": "entities@^1.1.1", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky\\node_modules\\mini-html-parser2", |
| | | "author": { |
| | | "name": "Felix Boehm", |
| | | "email": "me@feedic.com" |
| | | }, |
| | | "bugs": { |
| | | "url": "https://github.com/fb55/entities/issues" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "deprecated": false, |
| | | "description": "Encode & decode XML/HTML entities with ease", |
| | | "devDependencies": { |
| | | "coveralls": "*", |
| | | "istanbul": "*", |
| | | "jshint": "2", |
| | | "mocha": "^5.0.1", |
| | | "mocha-lcov-reporter": "*" |
| | | }, |
| | | "directories": { |
| | | "test": "test" |
| | | }, |
| | | "homepage": "https://github.com/fb55/entities#readme", |
| | | "jshintConfig": { |
| | | "eqeqeq": true, |
| | | "freeze": true, |
| | | "latedef": "nofunc", |
| | | "noarg": true, |
| | | "nonbsp": true, |
| | | "quotmark": "double", |
| | | "undef": true, |
| | | "unused": true, |
| | | "trailing": true, |
| | | "eqnull": true, |
| | | "proto": true, |
| | | "smarttabs": true, |
| | | "node": true, |
| | | "globals": { |
| | | "describe": true, |
| | | "it": true |
| | | } |
| | | }, |
| | | "keywords": [ |
| | | "html", |
| | | "xml", |
| | | "entity", |
| | | "decoding", |
| | | "encoding" |
| | | ], |
| | | "license": "BSD-2-Clause", |
| | | "main": "./index.js", |
| | | "name": "entities", |
| | | "prettier": { |
| | | "tabWidth": 4 |
| | | }, |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git://github.com/fb55/entities.git" |
| | | }, |
| | | "scripts": { |
| | | "coveralls": "npm run lint && npm run lcov && (cat coverage/lcov.info | coveralls || exit 0)", |
| | | "lcov": "istanbul cover _mocha --report lcovonly -- -R spec", |
| | | "lint": "jshint index.js lib/*.js test/*.js", |
| | | "test": "mocha && npm run lint" |
| | | }, |
| | | "version": "1.1.2" |
| | | } |
New file |
| | |
| | | # entities [](https://npmjs.org/package/entities) [](https://npmjs.org/package/entities) [](http://travis-ci.org/fb55/entities) [](https://coveralls.io/r/fb55/entities) |
| | | |
| | | En- & decoder for XML/HTML entities. |
| | | |
| | | ## How to… |
| | | |
| | | ### …install `entities` |
| | | |
| | | npm i entities |
| | | |
| | | ### …use `entities` |
| | | |
| | | ```javascript |
| | | var entities = require("entities"); |
| | | //encoding |
| | | entities.encodeXML("&"); // "&#38;" |
| | | entities.encodeHTML("&"); // "&#38;" |
| | | //decoding |
| | | entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" |
| | | entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" |
| | | ``` |
| | | |
| | | <!-- TODO extend API --> |
| | | |
| | | --- |
| | | |
| | | License: BSD-2-Clause |
New file |
| | |
| | | --check-leaks |
| | | --reporter spec |
New file |
| | |
| | | var assert = require("assert"), |
| | | path = require("path"), |
| | | entities = require("../"); |
| | | |
| | | describe("Encode->decode test", function() { |
| | | var testcases = [ |
| | | { |
| | | input: "asdf & ÿ ü '", |
| | | xml: "asdf & ÿ ü '", |
| | | html: "asdf & ÿ ü '" |
| | | }, |
| | | { |
| | | input: "&", |
| | | xml: "&#38;", |
| | | html: "&#38;" |
| | | } |
| | | ]; |
| | | testcases.forEach(function(tc) { |
| | | var encodedXML = entities.encodeXML(tc.input); |
| | | it("should XML encode " + tc.input, function() { |
| | | assert.equal(encodedXML, tc.xml); |
| | | }); |
| | | it("should default to XML encode " + tc.input, function() { |
| | | assert.equal(entities.encode(tc.input), tc.xml); |
| | | }); |
| | | it("should XML decode " + encodedXML, function() { |
| | | assert.equal(entities.decodeXML(encodedXML), tc.input); |
| | | }); |
| | | it("should default to XML encode " + encodedXML, function() { |
| | | assert.equal(entities.decode(encodedXML), tc.input); |
| | | }); |
| | | it("should default strict to XML encode " + encodedXML, function() { |
| | | assert.equal(entities.decodeStrict(encodedXML), tc.input); |
| | | }); |
| | | |
| | | var encodedHTML5 = entities.encodeHTML5(tc.input); |
| | | it("should HTML5 encode " + tc.input, function() { |
| | | assert.equal(encodedHTML5, tc.html); |
| | | }); |
| | | it("should HTML5 decode " + encodedHTML5, function() { |
| | | assert.equal(entities.decodeHTML(encodedHTML5), tc.input); |
| | | }); |
| | | }); |
| | | |
| | | it("should encode data URIs (issue 16)", function() { |
| | | var data = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAALAAABAAEAAAIBRAA7"; |
| | | assert.equal(entities.decode(entities.encode(data)), data); |
| | | }); |
| | | }); |
| | | |
| | | describe("Decode test", function() { |
| | | var testcases = [ |
| | | { input: "&amp;", output: "&" }, |
| | | { input: "&#38;", output: "&" }, |
| | | { input: "&#x26;", output: "&" }, |
| | | { input: "&#X26;", output: "&" }, |
| | | { input: "&#38;", output: "&" }, |
| | | { input: "&#38;", output: "&" }, |
| | | { input: "&#38;", output: "&" }, |
| | | { input: ":", output: ":" }, |
| | | { input: ":", output: ":" }, |
| | | { input: ":", output: ":" }, |
| | | { input: ":", output: ":" } |
| | | ]; |
| | | testcases.forEach(function(tc) { |
| | | it("should XML decode " + tc.input, function() { |
| | | assert.equal(entities.decodeXML(tc.input), tc.output); |
| | | }); |
| | | it("should HTML4 decode " + tc.input, function() { |
| | | assert.equal(entities.decodeHTML(tc.input), tc.output); |
| | | }); |
| | | it("should HTML5 decode " + tc.input, function() { |
| | | assert.equal(entities.decodeHTML(tc.input), tc.output); |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | var levels = ["xml", "entities"]; |
| | | |
| | | describe("Documents", function() { |
| | | levels |
| | | .map(function(n) { |
| | | return path.join("..", "maps", n); |
| | | }) |
| | | .map(require) |
| | | .forEach(function(doc, i) { |
| | | describe("Decode", function() { |
| | | it(levels[i], function() { |
| | | Object.keys(doc).forEach(function(e) { |
| | | for (var l = i; l < levels.length; l++) { |
| | | assert.equal(entities.decode("&" + e + ";", l), doc[e]); |
| | | } |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | describe("Decode strict", function() { |
| | | it(levels[i], function() { |
| | | Object.keys(doc).forEach(function(e) { |
| | | for (var l = i; l < levels.length; l++) { |
| | | assert.equal(entities.decodeStrict("&" + e + ";", l), doc[e]); |
| | | } |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | describe("Encode", function() { |
| | | it(levels[i], function() { |
| | | Object.keys(doc).forEach(function(e) { |
| | | for (var l = i; l < levels.length; l++) { |
| | | assert.equal(entities.decode(entities.encode(doc[e], l), l), doc[e]); |
| | | } |
| | | }); |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | var legacy = require("../maps/legacy.json"); |
| | | |
| | | describe("Legacy", function() { |
| | | it("should decode", runLegacy); |
| | | }); |
| | | |
| | | function runLegacy() { |
| | | Object.keys(legacy).forEach(function(e) { |
| | | assert.equal(entities.decodeHTML("&" + e), legacy[e]); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | var astral = { |
| | | "1D306": "\uD834\uDF06", |
| | | "1D11E": "\uD834\uDD1E" |
| | | }; |
| | | |
| | | var astralSpecial = { |
| | | "80": "\u20AC", |
| | | "110000": "\uFFFD" |
| | | }; |
| | | |
| | | describe("Astral entities", function() { |
| | | Object.keys(astral).forEach(function(c) { |
| | | it("should decode " + astral[c], function() { |
| | | assert.equal(entities.decode("&#x" + c + ";"), astral[c]); |
| | | }); |
| | | |
| | | it("should encode " + astral[c], function() { |
| | | assert.equal(entities.encode(astral[c]), "&#x" + c + ";"); |
| | | }); |
| | | |
| | | it("should escape " + astral[c], function() { |
| | | assert.equal(entities.escape(astral[c]), "&#x" + c + ";"); |
| | | }); |
| | | }); |
| | | |
| | | Object.keys(astralSpecial).forEach(function(c) { |
| | | it("special should decode \\u" + c, function() { |
| | | assert.equal(entities.decode("&#x" + c + ";"), astralSpecial[c]); |
| | | }); |
| | | }); |
| | | }); |
| | | |
| | | describe("Escape", function() { |
| | | it("should always decode ASCII chars", function() { |
| | | for (var i = 0; i < 0x7f; i++) { |
| | | var c = String.fromCharCode(i); |
| | | assert.equal(entities.decodeXML(entities.escape(c)), c); |
| | | } |
| | | }); |
| | | }); |
New file |
| | |
| | | sauce_connect: true |
| | | loopback: airtap.local |
| | | browsers: |
| | | - name: chrome |
| | | version: latest |
| | | - name: firefox |
| | | version: latest |
| | | - name: safari |
| | | version: 9..latest |
| | | - name: iphone |
| | | version: latest |
| | | - name: ie |
| | | version: 9..latest |
| | | - name: microsoftedge |
| | | version: 13..latest |
New file |
| | |
| | | # These are supported funding model platforms |
| | | |
| | | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] |
| | | patreon: # Replace with a single Patreon username |
| | | open_collective: # Replace with a single Open Collective username |
| | | ko_fi: # Replace with a single Ko-fi username |
| | | tidelift: npm/events |
| | | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry |
| | | liberapay: # Replace with a single Liberapay username |
| | | issuehunt: # Replace with a single IssueHunt username |
| | | otechie: # Replace with a single Otechie username |
| | | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] |
New file |
| | |
| | | dist: xenial |
| | | os: linux |
| | | language: node_js |
| | | node_js: |
| | | - 'stable' |
| | | - 'lts/*' |
| | | - '0.12' |
| | | script: |
| | | - npm test |
| | | - if [ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_NODE_VERSION}" = "stable" ]; then npm run test:browsers; fi |
| | | addons: |
| | | sauce_connect: true |
| | | hosts: |
| | | - airtap.local |
| | | env: |
| | | global: |
| | | - secure: XcBiD8yReflut9q7leKsigDZ0mI3qTKH+QrNVY8DaqlomJOZw8aOrVuX9Jz12l86ZJ41nbxmKnRNkFzcVr9mbP9YaeTb3DpeOBWmvaoSfud9Wnc16VfXtc1FCcwDhSVcSiM3UtnrmFU5cH+Dw1LPh5PbfylYOS/nJxUvG0FFLqI= |
| | | - secure: jNWtEbqhUdQ0xXDHvCYfUbKYeJCi6a7B4LsrcxYCyWWn4NIgncE5x2YbB+FSUUFVYfz0dsn5RKP1oHB99f0laUEo18HBNkrAS/rtyOdVzcpJjbQ6kgSILGjnJD/Ty1B57Rcz3iyev5Y7bLZ6Y1FbDnk/i9/l0faOGz8vTC3Vdkc= |
New file |
| | |
| | | # 3.2.0 |
| | | |
| | | - Add `events.once` from Node.js 11.13.0. |
| | | |
| | | To use this function, Promises must be supported in the environment. Use a polyfill like `es6-promise` if you support older browsers. |
| | | |
| | | # 3.1.0 (2020-01-08) |
| | | |
| | | `events` now matches the Node.js 11.12.0 API. |
| | | |
| | | - pass through return value in wrapped `emitter.once()` listeners |
| | | |
| | | Now, this works: |
| | | ```js |
| | | emitter.once('myevent', function () { return 1; }); |
| | | var listener = emitter.rawListeners('myevent')[0] |
| | | assert(listener() === 1); |
| | | ``` |
| | | Previously, `listener()` would return undefined regardless of the implementation. |
| | | |
| | | Ported from https://github.com/nodejs/node/commit/acc506c2d2771dab8d7bba6d3452bc5180dff7cf |
| | | |
| | | - Reduce code duplication in listener type check ([#67](https://github.com/Gozala/events/pull/67) by [@friederbluemle](https://github.com/friederbluemle)). |
| | | - Improve `emitter.once()` performance in some engines |
| | | |
| | | # 3.0.0 (2018-05-25) |
| | | |
| | | **This version drops support for IE8.** `events` no longer includes polyfills |
| | | for ES5 features. If you need to support older environments, use an ES5 shim |
| | | like [es5-shim](https://npmjs.com/package/es5-shim). Both the shim and sham |
| | | versions of es5-shim are necessary. |
| | | |
| | | - Update to events code from Node.js 10.x |
| | | - (semver major) Adds `off()` method |
| | | - Port more tests from Node.js |
| | | - Switch browser tests to airtap, making things more reliable |
| | | |
| | | # 2.1.0 (2018-05-25) |
| | | |
| | | - add Emitter#rawListeners from Node.js v9.4 |
| | | |
| | | # 2.0.0 (2018-02-02) |
| | | |
| | | - Update to events code from node.js 8.x |
| | | - Adds `prependListener()` and `prependOnceListener()` |
| | | - Adds `eventNames()` method |
| | | - (semver major) Unwrap `once()` listeners in `listeners()` |
| | | - copy tests from node.js |
| | | |
| | | Note that this version doubles the gzipped size, jumping from 1.1KB to 2.1KB, |
| | | due to new methods and runtime performance improvements. Be aware of that when |
| | | upgrading. |
| | | |
| | | # 1.1.1 (2016-06-22) |
| | | |
| | | - add more context to errors if they are not instanceof Error |
| | | |
| | | # 1.1.0 (2015-09-29) |
| | | |
| | | - add Emitter#listerCount (to match node v4 api) |
| | | |
| | | # 1.0.2 (2014-08-28) |
| | | |
| | | - remove un-reachable code |
| | | - update devDeps |
| | | |
| | | ## 1.0.1 / 2014-05-11 |
| | | |
| | | - check for console.trace before using it |
| | | |
| | | ## 1.0.0 / 2013-12-10 |
| | | |
| | | - Update to latest events code from node.js 0.10 |
| | | - copy tests from node.js |
| | | |
| | | ## 0.4.0 / 2011-07-03 ## |
| | | |
| | | - Switching to graphquire@0.8.0 |
| | | |
| | | ## 0.3.0 / 2011-07-03 ## |
| | | |
| | | - Switching to URL based module require. |
| | | |
| | | ## 0.2.0 / 2011-06-10 ## |
| | | |
| | | - Simplified package structure. |
| | | - Graphquire for dependency management. |
| | | |
| | | ## 0.1.1 / 2011-05-16 ## |
| | | |
| | | - Unhandled errors are logged via console.error |
| | | |
| | | ## 0.1.0 / 2011-04-22 ## |
| | | |
| | | - Initial release |
New file |
| | |
| | | MIT |
| | | |
| | | Copyright Joyent, Inc. and other Node contributors. |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining a |
| | | copy of this software and associated documentation files (the |
| | | "Software"), to deal in the Software without restriction, including |
| | | without limitation the rights to use, copy, modify, merge, publish, |
| | | distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | persons to whom the Software is furnished to do so, subject to the |
| | | following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be included |
| | | in all copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | USE OR OTHER DEALINGS IN THE SOFTWARE. |
New file |
| | |
| | | # events [](https://travis-ci.org/Gozala/events) |
| | | |
| | | > Node's event emitter for all engines. |
| | | |
| | | This implements the Node.js [`events`][node.js docs] module for environments that do not have it, like browsers. |
| | | |
| | | > `events` currently matches the **Node.js 11.13.0** API. |
| | | |
| | | Note that the `events` module uses ES5 features. If you need to support very old browsers like IE8, use a shim like [`es5-shim`](https://www.npmjs.com/package/es5-shim). You need both the shim and the sham versions of `es5-shim`. |
| | | |
| | | This module is maintained, but only by very few people. If you'd like to help, let us know in the [Maintainer Needed](https://github.com/Gozala/events/issues/43) issue! |
| | | |
| | | ## Install |
| | | |
| | | You usually do not have to install `events` yourself! If your code runs in Node.js, `events` is built in. If your code runs in the browser, bundlers like [browserify](https://github.com/browserify/browserify) or [webpack](https://github.com/webpack/webpack) also include the `events` module. |
| | | |
| | | But if none of those apply, with npm do: |
| | | |
| | | ``` |
| | | npm install events |
| | | ``` |
| | | |
| | | ## Usage |
| | | |
| | | ```javascript |
| | | var EventEmitter = require('events') |
| | | |
| | | var ee = new EventEmitter() |
| | | ee.on('message', function (text) { |
| | | console.log(text) |
| | | }) |
| | | ee.emit('message', 'hello world') |
| | | ``` |
| | | |
| | | ## API |
| | | |
| | | See the [Node.js EventEmitter docs][node.js docs]. `events` currently matches the Node.js 11.13.0 API. |
| | | |
| | | ## Contributing |
| | | |
| | | PRs are very welcome! The main way to contribute to `events` is by porting features, bugfixes and tests from Node.js. Ideally, code contributions to this module are copy-pasted from Node.js and transpiled to ES5, rather than reimplemented from scratch. Matching the Node.js code as closely as possible makes maintenance simpler when new changes land in Node.js. |
| | | This module intends to provide exactly the same API as Node.js, so features that are not available in the core `events` module will not be accepted. Feature requests should instead be directed at [nodejs/node](https://github.com/nodejs/node) and will be added to this module once they are implemented in Node.js. |
| | | |
| | | If there is a difference in behaviour between Node.js's `events` module and this module, please open an issue! |
| | | |
| | | ## License |
| | | |
| | | [MIT](./LICENSE) |
| | | [node.js docs]: https://nodejs.org/dist/v11.13.0/docs/api/events.html |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | 'use strict'; |
| | | |
| | | var R = typeof Reflect === 'object' ? Reflect : null |
| | | var ReflectApply = R && typeof R.apply === 'function' |
| | | ? R.apply |
| | | : function ReflectApply(target, receiver, args) { |
| | | return Function.prototype.apply.call(target, receiver, args); |
| | | } |
| | | |
| | | var ReflectOwnKeys |
| | | if (R && typeof R.ownKeys === 'function') { |
| | | ReflectOwnKeys = R.ownKeys |
| | | } else if (Object.getOwnPropertySymbols) { |
| | | ReflectOwnKeys = function ReflectOwnKeys(target) { |
| | | return Object.getOwnPropertyNames(target) |
| | | .concat(Object.getOwnPropertySymbols(target)); |
| | | }; |
| | | } else { |
| | | ReflectOwnKeys = function ReflectOwnKeys(target) { |
| | | return Object.getOwnPropertyNames(target); |
| | | }; |
| | | } |
| | | |
| | | function ProcessEmitWarning(warning) { |
| | | if (console && console.warn) console.warn(warning); |
| | | } |
| | | |
| | | var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { |
| | | return value !== value; |
| | | } |
| | | |
| | | function EventEmitter() { |
| | | EventEmitter.init.call(this); |
| | | } |
| | | module.exports = EventEmitter; |
| | | module.exports.once = once; |
| | | |
| | | // Backwards-compat with node 0.10.x |
| | | EventEmitter.EventEmitter = EventEmitter; |
| | | |
| | | EventEmitter.prototype._events = undefined; |
| | | EventEmitter.prototype._eventsCount = 0; |
| | | EventEmitter.prototype._maxListeners = undefined; |
| | | |
| | | // By default EventEmitters will print a warning if more than 10 listeners are |
| | | // added to it. This is a useful default which helps finding memory leaks. |
| | | var defaultMaxListeners = 10; |
| | | |
| | | function checkListener(listener) { |
| | | if (typeof listener !== 'function') { |
| | | throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); |
| | | } |
| | | } |
| | | |
| | | Object.defineProperty(EventEmitter, 'defaultMaxListeners', { |
| | | enumerable: true, |
| | | get: function() { |
| | | return defaultMaxListeners; |
| | | }, |
| | | set: function(arg) { |
| | | if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { |
| | | throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); |
| | | } |
| | | defaultMaxListeners = arg; |
| | | } |
| | | }); |
| | | |
| | | EventEmitter.init = function() { |
| | | |
| | | if (this._events === undefined || |
| | | this._events === Object.getPrototypeOf(this)._events) { |
| | | this._events = Object.create(null); |
| | | this._eventsCount = 0; |
| | | } |
| | | |
| | | this._maxListeners = this._maxListeners || undefined; |
| | | }; |
| | | |
| | | // Obviously not all Emitters should be limited to 10. This function allows |
| | | // that to be increased. Set to zero for unlimited. |
| | | EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { |
| | | if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { |
| | | throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); |
| | | } |
| | | this._maxListeners = n; |
| | | return this; |
| | | }; |
| | | |
| | | function _getMaxListeners(that) { |
| | | if (that._maxListeners === undefined) |
| | | return EventEmitter.defaultMaxListeners; |
| | | return that._maxListeners; |
| | | } |
| | | |
| | | EventEmitter.prototype.getMaxListeners = function getMaxListeners() { |
| | | return _getMaxListeners(this); |
| | | }; |
| | | |
| | | EventEmitter.prototype.emit = function emit(type) { |
| | | var args = []; |
| | | for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); |
| | | var doError = (type === 'error'); |
| | | |
| | | var events = this._events; |
| | | if (events !== undefined) |
| | | doError = (doError && events.error === undefined); |
| | | else if (!doError) |
| | | return false; |
| | | |
| | | // If there is no 'error' event listener then throw. |
| | | if (doError) { |
| | | var er; |
| | | if (args.length > 0) |
| | | er = args[0]; |
| | | if (er instanceof Error) { |
| | | // Note: The comments on the `throw` lines are intentional, they show |
| | | // up in Node's output if this results in an unhandled exception. |
| | | throw er; // Unhandled 'error' event |
| | | } |
| | | // At least give some kind of context to the user |
| | | var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); |
| | | err.context = er; |
| | | throw err; // Unhandled 'error' event |
| | | } |
| | | |
| | | var handler = events[type]; |
| | | |
| | | if (handler === undefined) |
| | | return false; |
| | | |
| | | if (typeof handler === 'function') { |
| | | ReflectApply(handler, this, args); |
| | | } else { |
| | | var len = handler.length; |
| | | var listeners = arrayClone(handler, len); |
| | | for (var i = 0; i < len; ++i) |
| | | ReflectApply(listeners[i], this, args); |
| | | } |
| | | |
| | | return true; |
| | | }; |
| | | |
| | | function _addListener(target, type, listener, prepend) { |
| | | var m; |
| | | var events; |
| | | var existing; |
| | | |
| | | checkListener(listener); |
| | | |
| | | events = target._events; |
| | | if (events === undefined) { |
| | | events = target._events = Object.create(null); |
| | | target._eventsCount = 0; |
| | | } else { |
| | | // To avoid recursion in the case that type === "newListener"! Before |
| | | // adding it to the listeners, first emit "newListener". |
| | | if (events.newListener !== undefined) { |
| | | target.emit('newListener', type, |
| | | listener.listener ? listener.listener : listener); |
| | | |
| | | // Re-assign `events` because a newListener handler could have caused the |
| | | // this._events to be assigned to a new object |
| | | events = target._events; |
| | | } |
| | | existing = events[type]; |
| | | } |
| | | |
| | | if (existing === undefined) { |
| | | // Optimize the case of one listener. Don't need the extra array object. |
| | | existing = events[type] = listener; |
| | | ++target._eventsCount; |
| | | } else { |
| | | if (typeof existing === 'function') { |
| | | // Adding the second element, need to change to array. |
| | | existing = events[type] = |
| | | prepend ? [listener, existing] : [existing, listener]; |
| | | // If we've already got an array, just append. |
| | | } else if (prepend) { |
| | | existing.unshift(listener); |
| | | } else { |
| | | existing.push(listener); |
| | | } |
| | | |
| | | // Check for listener leak |
| | | m = _getMaxListeners(target); |
| | | if (m > 0 && existing.length > m && !existing.warned) { |
| | | existing.warned = true; |
| | | // No error code for this since it is a Warning |
| | | // eslint-disable-next-line no-restricted-syntax |
| | | var w = new Error('Possible EventEmitter memory leak detected. ' + |
| | | existing.length + ' ' + String(type) + ' listeners ' + |
| | | 'added. Use emitter.setMaxListeners() to ' + |
| | | 'increase limit'); |
| | | w.name = 'MaxListenersExceededWarning'; |
| | | w.emitter = target; |
| | | w.type = type; |
| | | w.count = existing.length; |
| | | ProcessEmitWarning(w); |
| | | } |
| | | } |
| | | |
| | | return target; |
| | | } |
| | | |
| | | EventEmitter.prototype.addListener = function addListener(type, listener) { |
| | | return _addListener(this, type, listener, false); |
| | | }; |
| | | |
| | | EventEmitter.prototype.on = EventEmitter.prototype.addListener; |
| | | |
| | | EventEmitter.prototype.prependListener = |
| | | function prependListener(type, listener) { |
| | | return _addListener(this, type, listener, true); |
| | | }; |
| | | |
| | | function onceWrapper() { |
| | | if (!this.fired) { |
| | | this.target.removeListener(this.type, this.wrapFn); |
| | | this.fired = true; |
| | | if (arguments.length === 0) |
| | | return this.listener.call(this.target); |
| | | return this.listener.apply(this.target, arguments); |
| | | } |
| | | } |
| | | |
| | | function _onceWrap(target, type, listener) { |
| | | var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; |
| | | var wrapped = onceWrapper.bind(state); |
| | | wrapped.listener = listener; |
| | | state.wrapFn = wrapped; |
| | | return wrapped; |
| | | } |
| | | |
| | | EventEmitter.prototype.once = function once(type, listener) { |
| | | checkListener(listener); |
| | | this.on(type, _onceWrap(this, type, listener)); |
| | | return this; |
| | | }; |
| | | |
| | | EventEmitter.prototype.prependOnceListener = |
| | | function prependOnceListener(type, listener) { |
| | | checkListener(listener); |
| | | this.prependListener(type, _onceWrap(this, type, listener)); |
| | | return this; |
| | | }; |
| | | |
| | | // Emits a 'removeListener' event if and only if the listener was removed. |
| | | EventEmitter.prototype.removeListener = |
| | | function removeListener(type, listener) { |
| | | var list, events, position, i, originalListener; |
| | | |
| | | checkListener(listener); |
| | | |
| | | events = this._events; |
| | | if (events === undefined) |
| | | return this; |
| | | |
| | | list = events[type]; |
| | | if (list === undefined) |
| | | return this; |
| | | |
| | | if (list === listener || list.listener === listener) { |
| | | if (--this._eventsCount === 0) |
| | | this._events = Object.create(null); |
| | | else { |
| | | delete events[type]; |
| | | if (events.removeListener) |
| | | this.emit('removeListener', type, list.listener || listener); |
| | | } |
| | | } else if (typeof list !== 'function') { |
| | | position = -1; |
| | | |
| | | for (i = list.length - 1; i >= 0; i--) { |
| | | if (list[i] === listener || list[i].listener === listener) { |
| | | originalListener = list[i].listener; |
| | | position = i; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (position < 0) |
| | | return this; |
| | | |
| | | if (position === 0) |
| | | list.shift(); |
| | | else { |
| | | spliceOne(list, position); |
| | | } |
| | | |
| | | if (list.length === 1) |
| | | events[type] = list[0]; |
| | | |
| | | if (events.removeListener !== undefined) |
| | | this.emit('removeListener', type, originalListener || listener); |
| | | } |
| | | |
| | | return this; |
| | | }; |
| | | |
| | | EventEmitter.prototype.off = EventEmitter.prototype.removeListener; |
| | | |
| | | EventEmitter.prototype.removeAllListeners = |
| | | function removeAllListeners(type) { |
| | | var listeners, events, i; |
| | | |
| | | events = this._events; |
| | | if (events === undefined) |
| | | return this; |
| | | |
| | | // not listening for removeListener, no need to emit |
| | | if (events.removeListener === undefined) { |
| | | if (arguments.length === 0) { |
| | | this._events = Object.create(null); |
| | | this._eventsCount = 0; |
| | | } else if (events[type] !== undefined) { |
| | | if (--this._eventsCount === 0) |
| | | this._events = Object.create(null); |
| | | else |
| | | delete events[type]; |
| | | } |
| | | return this; |
| | | } |
| | | |
| | | // emit removeListener for all listeners on all events |
| | | if (arguments.length === 0) { |
| | | var keys = Object.keys(events); |
| | | var key; |
| | | for (i = 0; i < keys.length; ++i) { |
| | | key = keys[i]; |
| | | if (key === 'removeListener') continue; |
| | | this.removeAllListeners(key); |
| | | } |
| | | this.removeAllListeners('removeListener'); |
| | | this._events = Object.create(null); |
| | | this._eventsCount = 0; |
| | | return this; |
| | | } |
| | | |
| | | listeners = events[type]; |
| | | |
| | | if (typeof listeners === 'function') { |
| | | this.removeListener(type, listeners); |
| | | } else if (listeners !== undefined) { |
| | | // LIFO order |
| | | for (i = listeners.length - 1; i >= 0; i--) { |
| | | this.removeListener(type, listeners[i]); |
| | | } |
| | | } |
| | | |
| | | return this; |
| | | }; |
| | | |
| | | function _listeners(target, type, unwrap) { |
| | | var events = target._events; |
| | | |
| | | if (events === undefined) |
| | | return []; |
| | | |
| | | var evlistener = events[type]; |
| | | if (evlistener === undefined) |
| | | return []; |
| | | |
| | | if (typeof evlistener === 'function') |
| | | return unwrap ? [evlistener.listener || evlistener] : [evlistener]; |
| | | |
| | | return unwrap ? |
| | | unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); |
| | | } |
| | | |
| | | EventEmitter.prototype.listeners = function listeners(type) { |
| | | return _listeners(this, type, true); |
| | | }; |
| | | |
| | | EventEmitter.prototype.rawListeners = function rawListeners(type) { |
| | | return _listeners(this, type, false); |
| | | }; |
| | | |
| | | EventEmitter.listenerCount = function(emitter, type) { |
| | | if (typeof emitter.listenerCount === 'function') { |
| | | return emitter.listenerCount(type); |
| | | } else { |
| | | return listenerCount.call(emitter, type); |
| | | } |
| | | }; |
| | | |
| | | EventEmitter.prototype.listenerCount = listenerCount; |
| | | function listenerCount(type) { |
| | | var events = this._events; |
| | | |
| | | if (events !== undefined) { |
| | | var evlistener = events[type]; |
| | | |
| | | if (typeof evlistener === 'function') { |
| | | return 1; |
| | | } else if (evlistener !== undefined) { |
| | | return evlistener.length; |
| | | } |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | EventEmitter.prototype.eventNames = function eventNames() { |
| | | return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; |
| | | }; |
| | | |
| | | function arrayClone(arr, n) { |
| | | var copy = new Array(n); |
| | | for (var i = 0; i < n; ++i) |
| | | copy[i] = arr[i]; |
| | | return copy; |
| | | } |
| | | |
| | | function spliceOne(list, index) { |
| | | for (; index + 1 < list.length; index++) |
| | | list[index] = list[index + 1]; |
| | | list.pop(); |
| | | } |
| | | |
| | | function unwrapListeners(arr) { |
| | | var ret = new Array(arr.length); |
| | | for (var i = 0; i < ret.length; ++i) { |
| | | ret[i] = arr[i].listener || arr[i]; |
| | | } |
| | | return ret; |
| | | } |
| | | |
| | | function once(emitter, name) { |
| | | return new Promise(function (resolve, reject) { |
| | | function eventListener() { |
| | | if (errorListener !== undefined) { |
| | | emitter.removeListener('error', errorListener); |
| | | } |
| | | resolve([].slice.call(arguments)); |
| | | }; |
| | | var errorListener; |
| | | |
| | | // Adding an error listener is not optional because |
| | | // if an error is thrown on an event emitter we cannot |
| | | // guarantee that the actual event we are waiting will |
| | | // be fired. The result could be a silent way to create |
| | | // memory or file descriptor leaks, which is something |
| | | // we should avoid. |
| | | if (name !== 'error') { |
| | | errorListener = function errorListener(err) { |
| | | emitter.removeListener(name, eventListener); |
| | | reject(err); |
| | | }; |
| | | |
| | | emitter.once('error', errorListener); |
| | | } |
| | | |
| | | emitter.once(name, eventListener); |
| | | }); |
| | | } |
New file |
| | |
| | | { |
| | | "_from": "events@^3.0.0", |
| | | "_id": "events@3.2.0", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", |
| | | "_location": "/events", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "range", |
| | | "registry": true, |
| | | "raw": "events@^3.0.0", |
| | | "name": "events", |
| | | "escapedName": "events", |
| | | "rawSpec": "^3.0.0", |
| | | "saveSpec": null, |
| | | "fetchSpec": "^3.0.0" |
| | | }, |
| | | "_requiredBy": [ |
| | | "/mini-html-parser2" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", |
| | | "_shasum": "93b87c18f8efcd4202a461aec4dfc0556b639379", |
| | | "_spec": "events@^3.0.0", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky\\node_modules\\mini-html-parser2", |
| | | "author": { |
| | | "name": "Irakli Gozalishvili", |
| | | "email": "rfobic@gmail.com", |
| | | "url": "http://jeditoolkit.com" |
| | | }, |
| | | "bugs": { |
| | | "url": "http://github.com/Gozala/events/issues/" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "deprecated": false, |
| | | "description": "Node's event emitter for all engines.", |
| | | "devDependencies": { |
| | | "airtap": "^1.0.0", |
| | | "functions-have-names": "^1.2.1", |
| | | "has-symbols": "^1.0.1", |
| | | "isarray": "^2.0.5", |
| | | "tape": "^5.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.8.x" |
| | | }, |
| | | "homepage": "https://github.com/Gozala/events#readme", |
| | | "keywords": [ |
| | | "events", |
| | | "eventEmitter", |
| | | "eventDispatcher", |
| | | "listeners" |
| | | ], |
| | | "license": "MIT", |
| | | "main": "./events.js", |
| | | "name": "events", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git://github.com/Gozala/events.git", |
| | | "web": "https://github.com/Gozala/events" |
| | | }, |
| | | "scripts": { |
| | | "test": "node tests/index.js", |
| | | "test:browsers": "airtap -- tests/index.js" |
| | | }, |
| | | "version": "3.2.0" |
| | | } |
New file |
| | |
| | | # Security Policy |
| | | |
| | | ## Supported Versions |
| | | Only the latest major version is supported at any given time. |
| | | |
| | | ## Reporting a Vulnerability |
| | | |
| | | To report a security vulnerability, please use the |
| | | [Tidelift security contact](https://tidelift.com/security). |
| | | Tidelift will coordinate the fix and disclosure. |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../'); |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | var events_new_listener_emitted = []; |
| | | var listeners_new_listener_emitted = []; |
| | | |
| | | // Sanity check |
| | | assert.strictEqual(ee.addListener, ee.on); |
| | | |
| | | ee.on('newListener', function(event, listener) { |
| | | // Don't track newListener listeners. |
| | | if (event === 'newListener') |
| | | return; |
| | | |
| | | events_new_listener_emitted.push(event); |
| | | listeners_new_listener_emitted.push(listener); |
| | | }); |
| | | |
| | | var hello = common.mustCall(function(a, b) { |
| | | assert.strictEqual('a', a); |
| | | assert.strictEqual('b', b); |
| | | }); |
| | | |
| | | ee.once('newListener', function(name, listener) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(listener, hello); |
| | | |
| | | var listeners = this.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | }); |
| | | |
| | | ee.on('hello', hello); |
| | | ee.once('foo', assert.fail); |
| | | |
| | | assert.ok(Array.isArray(events_new_listener_emitted)); |
| | | assert.strictEqual(events_new_listener_emitted.length, 2); |
| | | assert.strictEqual(events_new_listener_emitted[0], 'hello'); |
| | | assert.strictEqual(events_new_listener_emitted[1], 'foo'); |
| | | |
| | | assert.ok(Array.isArray(listeners_new_listener_emitted)); |
| | | assert.strictEqual(listeners_new_listener_emitted.length, 2); |
| | | assert.strictEqual(listeners_new_listener_emitted[0], hello); |
| | | assert.strictEqual(listeners_new_listener_emitted[1], assert.fail); |
| | | |
| | | ee.emit('hello', 'a', 'b'); |
| | | } |
| | | |
| | | // just make sure that this doesn't throw: |
| | | { |
| | | var f = new EventEmitter(); |
| | | |
| | | f.setMaxListeners(0); |
| | | } |
| | | |
| | | { |
| | | var listen1 = function() {}; |
| | | var listen2 = function() {}; |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.once('newListener', function() { |
| | | var listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | ee.once('newListener', function() { |
| | | var listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | }); |
| | | ee.on('hello', listen2); |
| | | }); |
| | | ee.on('hello', listen1); |
| | | // The order of listeners on an event is not always the order in which the |
| | | // listeners were added. |
| | | var listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 2); |
| | | assert.strictEqual(listeners[0], listen2); |
| | | assert.strictEqual(listeners[1], listen1); |
| | | } |
| | | |
| | | // Verify that the listener must be a function |
| | | assert.throws(function() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.on('foo', null); |
| | | }, /^TypeError: The "listener" argument must be of type Function. Received type object$/); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | |
| | | // Redirect warning output to tape. |
| | | var consoleWarn = console.warn; |
| | | console.warn = common.test.comment; |
| | | |
| | | common.test.on('end', function () { |
| | | console.warn = consoleWarn; |
| | | }); |
| | | |
| | | // default |
| | | { |
| | | var e = new events.EventEmitter(); |
| | | |
| | | for (var i = 0; i < 10; i++) { |
| | | e.on('default', common.mustNotCall()); |
| | | } |
| | | assert.ok(!e._events['default'].hasOwnProperty('warned')); |
| | | e.on('default', common.mustNotCall()); |
| | | assert.ok(e._events['default'].warned); |
| | | |
| | | // specific |
| | | e.setMaxListeners(5); |
| | | for (var i = 0; i < 5; i++) { |
| | | e.on('specific', common.mustNotCall()); |
| | | } |
| | | assert.ok(!e._events['specific'].hasOwnProperty('warned')); |
| | | e.on('specific', common.mustNotCall()); |
| | | assert.ok(e._events['specific'].warned); |
| | | |
| | | // only one |
| | | e.setMaxListeners(1); |
| | | e.on('only one', common.mustNotCall()); |
| | | assert.ok(!e._events['only one'].hasOwnProperty('warned')); |
| | | e.on('only one', common.mustNotCall()); |
| | | assert.ok(e._events['only one'].hasOwnProperty('warned')); |
| | | |
| | | // unlimited |
| | | e.setMaxListeners(0); |
| | | for (var i = 0; i < 1000; i++) { |
| | | e.on('unlimited', common.mustNotCall()); |
| | | } |
| | | assert.ok(!e._events['unlimited'].hasOwnProperty('warned')); |
| | | } |
| | | |
| | | // process-wide |
| | | { |
| | | events.EventEmitter.defaultMaxListeners = 42; |
| | | var e = new events.EventEmitter(); |
| | | |
| | | for (var i = 0; i < 42; ++i) { |
| | | e.on('fortytwo', common.mustNotCall()); |
| | | } |
| | | assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); |
| | | e.on('fortytwo', common.mustNotCall()); |
| | | assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); |
| | | delete e._events['fortytwo'].warned; |
| | | |
| | | events.EventEmitter.defaultMaxListeners = 44; |
| | | e.on('fortytwo', common.mustNotCall()); |
| | | assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); |
| | | e.on('fortytwo', common.mustNotCall()); |
| | | assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); |
| | | } |
| | | |
| | | // but _maxListeners still has precedence over defaultMaxListeners |
| | | { |
| | | events.EventEmitter.defaultMaxListeners = 42; |
| | | var e = new events.EventEmitter(); |
| | | e.setMaxListeners(1); |
| | | e.on('uno', common.mustNotCall()); |
| | | assert.ok(!e._events['uno'].hasOwnProperty('warned')); |
| | | e.on('uno', common.mustNotCall()); |
| | | assert.ok(e._events['uno'].hasOwnProperty('warned')); |
| | | |
| | | // chainable |
| | | assert.strictEqual(e, e.setMaxListeners(1)); |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var test = require('tape'); |
| | | var assert = require('assert'); |
| | | |
| | | var noop = function() {}; |
| | | |
| | | var mustCallChecks = []; |
| | | |
| | | function runCallChecks(exitCode) { |
| | | if (exitCode !== 0) return; |
| | | |
| | | var failed = filter(mustCallChecks, function(context) { |
| | | if ('minimum' in context) { |
| | | context.messageSegment = 'at least ' + context.minimum; |
| | | return context.actual < context.minimum; |
| | | } else { |
| | | context.messageSegment = 'exactly ' + context.exact; |
| | | return context.actual !== context.exact; |
| | | } |
| | | }); |
| | | |
| | | for (var i = 0; i < failed.length; i++) { |
| | | var context = failed[i]; |
| | | console.log('Mismatched %s function calls. Expected %s, actual %d.', |
| | | context.name, |
| | | context.messageSegment, |
| | | context.actual); |
| | | // IE8 has no .stack |
| | | if (context.stack) console.log(context.stack.split('\n').slice(2).join('\n')); |
| | | } |
| | | |
| | | assert.strictEqual(failed.length, 0); |
| | | } |
| | | |
| | | exports.mustCall = function(fn, exact) { |
| | | return _mustCallInner(fn, exact, 'exact'); |
| | | }; |
| | | |
| | | function _mustCallInner(fn, criteria, field) { |
| | | if (typeof criteria == 'undefined') criteria = 1; |
| | | |
| | | if (typeof fn === 'number') { |
| | | criteria = fn; |
| | | fn = noop; |
| | | } else if (fn === undefined) { |
| | | fn = noop; |
| | | } |
| | | |
| | | if (typeof criteria !== 'number') |
| | | throw new TypeError('Invalid ' + field + ' value: ' + criteria); |
| | | |
| | | var context = { |
| | | actual: 0, |
| | | stack: (new Error()).stack, |
| | | name: fn.name || '<anonymous>' |
| | | }; |
| | | |
| | | context[field] = criteria; |
| | | |
| | | // add the exit listener only once to avoid listener leak warnings |
| | | if (mustCallChecks.length === 0) test.onFinish(function() { runCallChecks(0); }); |
| | | |
| | | mustCallChecks.push(context); |
| | | |
| | | return function() { |
| | | context.actual++; |
| | | return fn.apply(this, arguments); |
| | | }; |
| | | } |
| | | |
| | | exports.mustNotCall = function(msg) { |
| | | return function mustNotCall() { |
| | | assert.fail(msg || 'function should not have been called'); |
| | | }; |
| | | }; |
| | | |
| | | function filter(arr, fn) { |
| | | if (arr.filter) return arr.filter(fn); |
| | | var filtered = []; |
| | | for (var i = 0; i < arr.length; i++) { |
| | | if (fn(arr[i], i, arr)) filtered.push(arr[i]); |
| | | } |
| | | return filtered |
| | | } |
New file |
| | |
| | | 'use strict'; |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../'); |
| | | |
| | | var EE = new EventEmitter(); |
| | | |
| | | assert.throws(function () { |
| | | EE.emit('error', 'Accepts a string'); |
| | | }, 'Error: Unhandled error. (Accepts a string)'); |
| | | |
| | | assert.throws(function () { |
| | | EE.emit('error', { message: 'Error!' }); |
| | | }, 'Unhandled error. ([object Object])'); |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | var EventEmitter = require('../'); |
| | | var assert = require('assert'); |
| | | |
| | | var EE = new EventEmitter(); |
| | | var m = function() {}; |
| | | EE.on('foo', function() {}); |
| | | assert.equal(1, EE.eventNames().length); |
| | | assert.equal('foo', EE.eventNames()[0]); |
| | | EE.on('bar', m); |
| | | assert.equal(2, EE.eventNames().length); |
| | | assert.equal('foo', EE.eventNames()[0]); |
| | | assert.equal('bar', EE.eventNames()[1]); |
| | | EE.removeListener('bar', m); |
| | | assert.equal(1, EE.eventNames().length); |
| | | assert.equal('foo', EE.eventNames()[0]); |
| | | |
| | | if (typeof Symbol !== 'undefined') { |
| | | var s = Symbol('s'); |
| | | EE.on(s, m); |
| | | assert.equal(2, EE.eventNames().length); |
| | | assert.equal('foo', EE.eventNames()[0]); |
| | | assert.equal(s, EE.eventNames()[1]); |
| | | EE.removeListener(s, m); |
| | | assert.equal(1, EE.eventNames().length); |
| | | assert.equal('foo', EE.eventNames()[0]); |
| | | } |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | var common = require('./common'); |
| | | var EventEmitter = require('../').EventEmitter; |
| | | var once = require('../').once; |
| | | var assert = require('assert'); |
| | | |
| | | function onceAnEvent() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | process.nextTick(function () { |
| | | ee.emit('myevent', 42); |
| | | }); |
| | | |
| | | return once(ee, 'myevent').then(function (args) { |
| | | var value = args[0] |
| | | assert.strictEqual(value, 42); |
| | | assert.strictEqual(ee.listenerCount('error'), 0); |
| | | assert.strictEqual(ee.listenerCount('myevent'), 0); |
| | | }); |
| | | } |
| | | |
| | | function onceAnEventWithTwoArgs() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | process.nextTick(function () { |
| | | ee.emit('myevent', 42, 24); |
| | | }); |
| | | |
| | | return once(ee, 'myevent').then(function (value) { |
| | | assert.strictEqual(value.length, 2); |
| | | assert.strictEqual(value[0], 42); |
| | | assert.strictEqual(value[1], 24); |
| | | }); |
| | | } |
| | | |
| | | function catchesErrors() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | var expected = new Error('kaboom'); |
| | | var err; |
| | | process.nextTick(function () { |
| | | ee.emit('error', expected); |
| | | }); |
| | | |
| | | return once(ee, 'myevent').then(function () { |
| | | throw new Error('should reject') |
| | | }, function (err) { |
| | | assert.strictEqual(err, expected); |
| | | assert.strictEqual(ee.listenerCount('error'), 0); |
| | | assert.strictEqual(ee.listenerCount('myevent'), 0); |
| | | }); |
| | | } |
| | | |
| | | function stopListeningAfterCatchingError() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | var expected = new Error('kaboom'); |
| | | var err; |
| | | process.nextTick(function () { |
| | | ee.emit('error', expected); |
| | | ee.emit('myevent', 42, 24); |
| | | }); |
| | | |
| | | // process.on('multipleResolves', common.mustNotCall()); |
| | | |
| | | return once(ee, 'myevent').then(common.mustNotCall, function (err) { |
| | | // process.removeAllListeners('multipleResolves'); |
| | | assert.strictEqual(err, expected); |
| | | assert.strictEqual(ee.listenerCount('error'), 0); |
| | | assert.strictEqual(ee.listenerCount('myevent'), 0); |
| | | }); |
| | | } |
| | | |
| | | function onceError() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | var expected = new Error('kaboom'); |
| | | process.nextTick(function () { |
| | | ee.emit('error', expected); |
| | | }); |
| | | |
| | | return once(ee, 'error').then(function (args) { |
| | | var err = args[0] |
| | | assert.strictEqual(err, expected); |
| | | assert.strictEqual(ee.listenerCount('error'), 0); |
| | | assert.strictEqual(ee.listenerCount('myevent'), 0); |
| | | }); |
| | | } |
| | | |
| | | Promise.all([ |
| | | onceAnEvent(), |
| | | onceAnEventWithTwoArgs(), |
| | | catchesErrors(), |
| | | stopListeningAfterCatchingError(), |
| | | onceError() |
| | | ]).catch(function (err) { |
| | | console.error(err.stack) |
| | | process.exit(1) |
| | | }); |
New file |
| | |
| | | var test = require('tape'); |
| | | var functionsHaveNames = require('functions-have-names'); |
| | | var hasSymbols = require('has-symbols'); |
| | | |
| | | require('./legacy-compat'); |
| | | var common = require('./common'); |
| | | |
| | | // we do this to easily wrap each file in a mocha test |
| | | // and also have browserify be able to statically analyze this file |
| | | var orig_require = require; |
| | | var require = function(file) { |
| | | test(file, function(t) { |
| | | // Store the tape object so tests can access it. |
| | | t.on('end', function () { delete common.test; }); |
| | | common.test = t; |
| | | |
| | | try { orig_require(file); } catch (err) { t.fail(err); } |
| | | t.end(); |
| | | }); |
| | | }; |
| | | |
| | | require('./add-listeners.js'); |
| | | require('./check-listener-leaks.js'); |
| | | require('./errors.js'); |
| | | require('./events-list.js'); |
| | | if (typeof Promise === 'function') { |
| | | require('./events-once.js'); |
| | | } else { |
| | | // Promise support is not available. |
| | | test('./events-once.js', { skip: true }, function () {}); |
| | | } |
| | | require('./listener-count.js'); |
| | | require('./listeners-side-effects.js'); |
| | | require('./listeners.js'); |
| | | require('./max-listeners.js'); |
| | | if (functionsHaveNames()) { |
| | | require('./method-names.js'); |
| | | } else { |
| | | // Function.name is not supported in IE |
| | | test('./method-names.js', { skip: true }, function () {}); |
| | | } |
| | | require('./modify-in-emit.js'); |
| | | require('./num-args.js'); |
| | | require('./once.js'); |
| | | require('./prepend.js'); |
| | | require('./set-max-listeners-side-effects.js'); |
| | | require('./special-event-names.js'); |
| | | require('./subclass.js'); |
| | | if (hasSymbols()) { |
| | | require('./symbols.js'); |
| | | } else { |
| | | // Symbol is not available. |
| | | test('./symbols.js', { skip: true }, function () {}); |
| | | } |
| | | require('./remove-all-listeners.js'); |
| | | require('./remove-listeners.js'); |
New file |
| | |
| | | // sigh... life is hard |
| | | if (!global.console) { |
| | | console = {} |
| | | } |
| | | |
| | | var fns = ['log', 'error', 'trace']; |
| | | for (var i=0 ; i<fns.length ; ++i) { |
| | | var fn = fns[i]; |
| | | if (!console[fn]) { |
| | | console[fn] = function() {}; |
| | | } |
| | | } |
| | | |
| | | if (!Array.isArray) { |
| | | Array.isArray = require('isarray'); |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../'); |
| | | |
| | | var emitter = new EventEmitter(); |
| | | emitter.on('foo', function() {}); |
| | | emitter.on('foo', function() {}); |
| | | emitter.on('baz', function() {}); |
| | | // Allow any type |
| | | emitter.on(123, function() {}); |
| | | |
| | | assert.strictEqual(EventEmitter.listenerCount(emitter, 'foo'), 2); |
| | | assert.strictEqual(emitter.listenerCount('foo'), 2); |
| | | assert.strictEqual(emitter.listenerCount('bar'), 0); |
| | | assert.strictEqual(emitter.listenerCount('baz'), 1); |
| | | assert.strictEqual(emitter.listenerCount(123), 1); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | |
| | | var EventEmitter = require('../').EventEmitter; |
| | | |
| | | var e = new EventEmitter(); |
| | | var fl; // foo listeners |
| | | |
| | | fl = e.listeners('foo'); |
| | | assert.ok(Array.isArray(fl)); |
| | | assert.strictEqual(fl.length, 0); |
| | | if (Object.create) assert.ok(!(e._events instanceof Object)); |
| | | assert.strictEqual(Object.keys(e._events).length, 0); |
| | | |
| | | e.on('foo', assert.fail); |
| | | fl = e.listeners('foo'); |
| | | assert.strictEqual(e._events.foo, assert.fail); |
| | | assert.ok(Array.isArray(fl)); |
| | | assert.strictEqual(fl.length, 1); |
| | | assert.strictEqual(fl[0], assert.fail); |
| | | |
| | | e.listeners('bar'); |
| | | |
| | | e.on('foo', assert.ok); |
| | | fl = e.listeners('foo'); |
| | | |
| | | assert.ok(Array.isArray(e._events.foo)); |
| | | assert.strictEqual(e._events.foo.length, 2); |
| | | assert.strictEqual(e._events.foo[0], assert.fail); |
| | | assert.strictEqual(e._events.foo[1], assert.ok); |
| | | |
| | | assert.ok(Array.isArray(fl)); |
| | | assert.strictEqual(fl.length, 2); |
| | | assert.strictEqual(fl[0], assert.fail); |
| | | assert.strictEqual(fl[1], assert.ok); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | var util = require('util'); |
| | | |
| | | function listener() {} |
| | | function listener2() {} |
| | | function listener3() { |
| | | return 0; |
| | | } |
| | | function listener4() { |
| | | return 1; |
| | | } |
| | | |
| | | function TestStream() {} |
| | | util.inherits(TestStream, events.EventEmitter); |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', listener); |
| | | var fooListeners = ee.listeners('foo'); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener); |
| | | |
| | | ee.removeAllListeners('foo'); |
| | | listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | |
| | | assert.ok(Array.isArray(fooListeners)); |
| | | assert.strictEqual(fooListeners.length, 1); |
| | | assert.strictEqual(fooListeners[0], listener); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', listener); |
| | | |
| | | var eeListenersCopy = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(eeListenersCopy)); |
| | | assert.strictEqual(eeListenersCopy.length, 1); |
| | | assert.strictEqual(eeListenersCopy[0], listener); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener); |
| | | |
| | | eeListenersCopy.push(listener2); |
| | | listeners = ee.listeners('foo'); |
| | | |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener); |
| | | |
| | | assert.strictEqual(eeListenersCopy.length, 2); |
| | | assert.strictEqual(eeListenersCopy[0], listener); |
| | | assert.strictEqual(eeListenersCopy[1], listener2); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', listener); |
| | | var eeListenersCopy = ee.listeners('foo'); |
| | | ee.on('foo', listener2); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 2); |
| | | assert.strictEqual(listeners[0], listener); |
| | | assert.strictEqual(listeners[1], listener2); |
| | | |
| | | assert.ok(Array.isArray(eeListenersCopy)); |
| | | assert.strictEqual(eeListenersCopy.length, 1); |
| | | assert.strictEqual(eeListenersCopy[0], listener); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.once('foo', listener); |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', listener); |
| | | ee.once('foo', listener2); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 2); |
| | | assert.strictEqual(listeners[0], listener); |
| | | assert.strictEqual(listeners[1], listener2); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee._events = undefined; |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | { |
| | | var s = new TestStream(); |
| | | var listeners = s.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', listener); |
| | | var wrappedListener = ee.rawListeners('foo'); |
| | | assert.strictEqual(wrappedListener.length, 1); |
| | | assert.strictEqual(wrappedListener[0], listener); |
| | | assert.notStrictEqual(wrappedListener, ee.rawListeners('foo')); |
| | | ee.once('foo', listener); |
| | | var wrappedListeners = ee.rawListeners('foo'); |
| | | assert.strictEqual(wrappedListeners.length, 2); |
| | | assert.strictEqual(wrappedListeners[0], listener); |
| | | assert.notStrictEqual(wrappedListeners[1], listener); |
| | | assert.strictEqual(wrappedListeners[1].listener, listener); |
| | | assert.notStrictEqual(wrappedListeners, ee.rawListeners('foo')); |
| | | ee.emit('foo'); |
| | | assert.strictEqual(wrappedListeners.length, 2); |
| | | assert.strictEqual(wrappedListeners[1].listener, listener); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.once('foo', listener3); |
| | | ee.on('foo', listener4); |
| | | var rawListeners = ee.rawListeners('foo'); |
| | | assert.strictEqual(rawListeners.length, 2); |
| | | assert.strictEqual(rawListeners[0](), 0); |
| | | var rawListener = ee.rawListeners('foo'); |
| | | assert.strictEqual(rawListener.length, 1); |
| | | assert.strictEqual(rawListener[0](), 1); |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | var e = new events.EventEmitter(); |
| | | |
| | | var hasDefineProperty = !!Object.defineProperty; |
| | | try { Object.defineProperty({}, 'x', { value: 0 }); } catch (err) { hasDefineProperty = false } |
| | | |
| | | e.on('maxListeners', common.mustCall()); |
| | | |
| | | // Should not corrupt the 'maxListeners' queue. |
| | | e.setMaxListeners(42); |
| | | |
| | | var throwsObjs = [NaN, -1, 'and even this']; |
| | | var maxError = /^RangeError: The value of "n" is out of range\. It must be a non-negative number\./; |
| | | var defError = /^RangeError: The value of "defaultMaxListeners" is out of range\. It must be a non-negative number\./; |
| | | |
| | | for (var i = 0; i < throwsObjs.length; i++) { |
| | | var obj = throwsObjs[i]; |
| | | assert.throws(function() { e.setMaxListeners(obj); }, maxError); |
| | | if (hasDefineProperty) { |
| | | assert.throws(function() { events.defaultMaxListeners = obj; }, defError); |
| | | } |
| | | } |
| | | |
| | | e.emit('maxListeners'); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | 'use strict'; |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | |
| | | var E = events.EventEmitter.prototype; |
| | | assert.strictEqual(E.constructor.name, 'EventEmitter'); |
| | | assert.strictEqual(E.on, E.addListener); // Same method. |
| | | assert.strictEqual(E.off, E.removeListener); // Same method. |
| | | Object.getOwnPropertyNames(E).forEach(function(name) { |
| | | if (name === 'constructor' || name === 'on' || name === 'off') return; |
| | | if (typeof E[name] !== 'function') return; |
| | | assert.strictEqual(E[name].name, name); |
| | | }); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | |
| | | var callbacks_called = []; |
| | | |
| | | var e = new events.EventEmitter(); |
| | | |
| | | function callback1() { |
| | | callbacks_called.push('callback1'); |
| | | e.on('foo', callback2); |
| | | e.on('foo', callback3); |
| | | e.removeListener('foo', callback1); |
| | | } |
| | | |
| | | function callback2() { |
| | | callbacks_called.push('callback2'); |
| | | e.removeListener('foo', callback2); |
| | | } |
| | | |
| | | function callback3() { |
| | | callbacks_called.push('callback3'); |
| | | e.removeListener('foo', callback3); |
| | | } |
| | | |
| | | e.on('foo', callback1); |
| | | assert.strictEqual(e.listeners('foo').length, 1); |
| | | |
| | | e.emit('foo'); |
| | | assert.strictEqual(e.listeners('foo').length, 2); |
| | | assert.ok(Array.isArray(callbacks_called)); |
| | | assert.strictEqual(callbacks_called.length, 1); |
| | | assert.strictEqual(callbacks_called[0], 'callback1'); |
| | | |
| | | e.emit('foo'); |
| | | assert.strictEqual(e.listeners('foo').length, 0); |
| | | assert.ok(Array.isArray(callbacks_called)); |
| | | assert.strictEqual(callbacks_called.length, 3); |
| | | assert.strictEqual(callbacks_called[0], 'callback1'); |
| | | assert.strictEqual(callbacks_called[1], 'callback2'); |
| | | assert.strictEqual(callbacks_called[2], 'callback3'); |
| | | |
| | | e.emit('foo'); |
| | | assert.strictEqual(e.listeners('foo').length, 0); |
| | | assert.ok(Array.isArray(callbacks_called)); |
| | | assert.strictEqual(callbacks_called.length, 3); |
| | | assert.strictEqual(callbacks_called[0], 'callback1'); |
| | | assert.strictEqual(callbacks_called[1], 'callback2'); |
| | | assert.strictEqual(callbacks_called[2], 'callback3'); |
| | | |
| | | e.on('foo', callback1); |
| | | e.on('foo', callback2); |
| | | assert.strictEqual(e.listeners('foo').length, 2); |
| | | e.removeAllListeners('foo'); |
| | | assert.strictEqual(e.listeners('foo').length, 0); |
| | | |
| | | // Verify that removing callbacks while in emit allows emits to propagate to |
| | | // all listeners |
| | | callbacks_called = []; |
| | | |
| | | e.on('foo', callback2); |
| | | e.on('foo', callback3); |
| | | assert.strictEqual(2, e.listeners('foo').length); |
| | | e.emit('foo'); |
| | | assert.ok(Array.isArray(callbacks_called)); |
| | | assert.strictEqual(callbacks_called.length, 2); |
| | | assert.strictEqual(callbacks_called[0], 'callback2'); |
| | | assert.strictEqual(callbacks_called[1], 'callback3'); |
| | | assert.strictEqual(0, e.listeners('foo').length); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | |
| | | var e = new events.EventEmitter(); |
| | | var num_args_emitted = []; |
| | | |
| | | e.on('numArgs', function() { |
| | | var numArgs = arguments.length; |
| | | num_args_emitted.push(numArgs); |
| | | }); |
| | | |
| | | e.on('foo', function() { |
| | | num_args_emitted.push(arguments.length); |
| | | }); |
| | | |
| | | e.on('foo', function() { |
| | | num_args_emitted.push(arguments.length); |
| | | }); |
| | | |
| | | e.emit('numArgs'); |
| | | e.emit('numArgs', null); |
| | | e.emit('numArgs', null, null); |
| | | e.emit('numArgs', null, null, null); |
| | | e.emit('numArgs', null, null, null, null); |
| | | e.emit('numArgs', null, null, null, null, null); |
| | | |
| | | e.emit('foo', null, null, null, null); |
| | | |
| | | assert.ok(Array.isArray(num_args_emitted)); |
| | | assert.strictEqual(num_args_emitted.length, 8); |
| | | assert.strictEqual(num_args_emitted[0], 0); |
| | | assert.strictEqual(num_args_emitted[1], 1); |
| | | assert.strictEqual(num_args_emitted[2], 2); |
| | | assert.strictEqual(num_args_emitted[3], 3); |
| | | assert.strictEqual(num_args_emitted[4], 4); |
| | | assert.strictEqual(num_args_emitted[5], 5); |
| | | assert.strictEqual(num_args_emitted[6], 4); |
| | | assert.strictEqual(num_args_emitted[6], 4); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../'); |
| | | |
| | | var e = new EventEmitter(); |
| | | |
| | | e.once('hello', common.mustCall()); |
| | | |
| | | e.emit('hello', 'a', 'b'); |
| | | e.emit('hello', 'a', 'b'); |
| | | e.emit('hello', 'a', 'b'); |
| | | e.emit('hello', 'a', 'b'); |
| | | |
| | | function remove() { |
| | | assert.fail('once->foo should not be emitted'); |
| | | } |
| | | |
| | | e.once('foo', remove); |
| | | e.removeListener('foo', remove); |
| | | e.emit('foo'); |
| | | |
| | | e.once('e', common.mustCall(function() { |
| | | e.emit('e'); |
| | | })); |
| | | |
| | | e.once('e', common.mustCall()); |
| | | |
| | | e.emit('e'); |
| | | |
| | | // Verify that the listener must be a function |
| | | assert.throws(function() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.once('foo', null); |
| | | }, /^TypeError: The "listener" argument must be of type Function. Received type object$/); |
| | | |
| | | { |
| | | // once() has different code paths based on the number of arguments being |
| | | // emitted. Verify that all of the cases are covered. |
| | | var maxArgs = 4; |
| | | |
| | | for (var i = 0; i <= maxArgs; ++i) { |
| | | var ee = new EventEmitter(); |
| | | var args = ['foo']; |
| | | |
| | | for (var j = 0; j < i; ++j) |
| | | args.push(j); |
| | | |
| | | ee.once('foo', common.mustCall(function() { |
| | | var params = Array.prototype.slice.call(arguments); |
| | | var restArgs = args.slice(1); |
| | | assert.ok(Array.isArray(params)); |
| | | assert.strictEqual(params.length, restArgs.length); |
| | | for (var index = 0; index < params.length; index++) { |
| | | var param = params[index]; |
| | | assert.strictEqual(param, restArgs[index]); |
| | | } |
| | | })); |
| | | |
| | | EventEmitter.prototype.emit.apply(ee, args); |
| | | } |
| | | } |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | var common = require('./common'); |
| | | var EventEmitter = require('../'); |
| | | var assert = require('assert'); |
| | | |
| | | var myEE = new EventEmitter(); |
| | | var m = 0; |
| | | // This one comes last. |
| | | myEE.on('foo', common.mustCall(function () { |
| | | assert.strictEqual(m, 2); |
| | | })); |
| | | |
| | | // This one comes second. |
| | | myEE.prependListener('foo', common.mustCall(function () { |
| | | assert.strictEqual(m++, 1); |
| | | })); |
| | | |
| | | // This one comes first. |
| | | myEE.prependOnceListener('foo', |
| | | common.mustCall(function () { |
| | | assert.strictEqual(m++, 0); |
| | | })); |
| | | |
| | | myEE.emit('foo'); |
| | | |
| | | // Verify that the listener must be a function |
| | | assert.throws(function () { |
| | | var ee = new EventEmitter(); |
| | | ee.prependOnceListener('foo', null); |
| | | }, 'TypeError: The "listener" argument must be of type Function. Received type object'); |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | var test = require('tape'); |
| | | |
| | | function expect(expected) { |
| | | var actual = []; |
| | | test.onFinish(function() { |
| | | var sortedActual = actual.sort(); |
| | | var sortedExpected = expected.sort(); |
| | | assert.strictEqual(sortedActual.length, sortedExpected.length); |
| | | for (var index = 0; index < sortedActual.length; index++) { |
| | | var value = sortedActual[index]; |
| | | assert.strictEqual(value, sortedExpected[index]); |
| | | } |
| | | }); |
| | | function listener(name) { |
| | | actual.push(name); |
| | | } |
| | | return common.mustCall(listener, expected.length); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | var noop = common.mustNotCall(); |
| | | ee.on('foo', noop); |
| | | ee.on('bar', noop); |
| | | ee.on('baz', noop); |
| | | ee.on('baz', noop); |
| | | var fooListeners = ee.listeners('foo'); |
| | | var barListeners = ee.listeners('bar'); |
| | | var bazListeners = ee.listeners('baz'); |
| | | ee.on('removeListener', expect(['bar', 'baz', 'baz'])); |
| | | ee.removeAllListeners('bar'); |
| | | ee.removeAllListeners('baz'); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], noop); |
| | | |
| | | listeners = ee.listeners('bar'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | listeners = ee.listeners('baz'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | // After calling removeAllListeners(), |
| | | // the old listeners array should stay unchanged. |
| | | assert.strictEqual(fooListeners.length, 1); |
| | | assert.strictEqual(fooListeners[0], noop); |
| | | assert.strictEqual(barListeners.length, 1); |
| | | assert.strictEqual(barListeners[0], noop); |
| | | assert.strictEqual(bazListeners.length, 2); |
| | | assert.strictEqual(bazListeners[0], noop); |
| | | assert.strictEqual(bazListeners[1], noop); |
| | | // After calling removeAllListeners(), |
| | | // new listeners arrays is different from the old. |
| | | assert.notStrictEqual(ee.listeners('bar'), barListeners); |
| | | assert.notStrictEqual(ee.listeners('baz'), bazListeners); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('foo', common.mustNotCall()); |
| | | ee.on('bar', common.mustNotCall()); |
| | | // Expect LIFO order |
| | | ee.on('removeListener', expect(['foo', 'bar', 'removeListener'])); |
| | | ee.on('removeListener', expect(['foo', 'bar'])); |
| | | ee.removeAllListeners(); |
| | | |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | listeners = ee.listeners('bar'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee.on('removeListener', common.mustNotCall()); |
| | | // Check for regression where removeAllListeners() throws when |
| | | // there exists a 'removeListener' listener, but there exists |
| | | // no listeners for the provided event type. |
| | | assert.doesNotThrow(function () { ee.removeAllListeners(ee, 'foo') }); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | var expectLength = 2; |
| | | ee.on('removeListener', function() { |
| | | assert.strictEqual(expectLength--, this.listeners('baz').length); |
| | | }); |
| | | ee.on('baz', common.mustNotCall()); |
| | | ee.on('baz', common.mustNotCall()); |
| | | ee.on('baz', common.mustNotCall()); |
| | | assert.strictEqual(ee.listeners('baz').length, expectLength + 1); |
| | | ee.removeAllListeners('baz'); |
| | | assert.strictEqual(ee.listeners('baz').length, 0); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | assert.strictEqual(ee, ee.removeAllListeners()); |
| | | } |
| | | |
| | | { |
| | | var ee = new events.EventEmitter(); |
| | | ee._events = undefined; |
| | | assert.strictEqual(ee, ee.removeAllListeners()); |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../'); |
| | | |
| | | var listener1 = function listener1() {}; |
| | | var listener2 = function listener2() {}; |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | ee.on('hello', listener1); |
| | | ee.on('removeListener', common.mustCall(function(name, cb) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(cb, listener1); |
| | | })); |
| | | ee.removeListener('hello', listener1); |
| | | var listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | ee.on('hello', listener1); |
| | | ee.on('removeListener', common.mustNotCall()); |
| | | ee.removeListener('hello', listener2); |
| | | |
| | | var listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener1); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | ee.on('hello', listener1); |
| | | ee.on('hello', listener2); |
| | | |
| | | var listeners; |
| | | ee.once('removeListener', common.mustCall(function(name, cb) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(cb, listener1); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener2); |
| | | })); |
| | | ee.removeListener('hello', listener1); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener2); |
| | | ee.once('removeListener', common.mustCall(function(name, cb) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(cb, listener2); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | })); |
| | | ee.removeListener('hello', listener2); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | |
| | | function remove1() { |
| | | assert.fail('remove1 should not have been called'); |
| | | } |
| | | |
| | | function remove2() { |
| | | assert.fail('remove2 should not have been called'); |
| | | } |
| | | |
| | | ee.on('removeListener', common.mustCall(function(name, cb) { |
| | | if (cb !== remove1) return; |
| | | this.removeListener('quux', remove2); |
| | | this.emit('quux'); |
| | | }, 2)); |
| | | ee.on('quux', remove1); |
| | | ee.on('quux', remove2); |
| | | ee.removeListener('quux', remove1); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | ee.on('hello', listener1); |
| | | ee.on('hello', listener2); |
| | | |
| | | var listeners; |
| | | ee.once('removeListener', common.mustCall(function(name, cb) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(cb, listener1); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 1); |
| | | assert.strictEqual(listeners[0], listener2); |
| | | ee.once('removeListener', common.mustCall(function(name, cb) { |
| | | assert.strictEqual(name, 'hello'); |
| | | assert.strictEqual(cb, listener2); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | })); |
| | | ee.removeListener('hello', listener2); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | })); |
| | | ee.removeListener('hello', listener1); |
| | | listeners = ee.listeners('hello'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 0); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | var listener3 = common.mustCall(function() { |
| | | ee.removeListener('hello', listener4); |
| | | }, 2); |
| | | var listener4 = common.mustCall(); |
| | | |
| | | ee.on('hello', listener3); |
| | | ee.on('hello', listener4); |
| | | |
| | | // listener4 will still be called although it is removed by listener 3. |
| | | ee.emit('hello'); |
| | | // This is so because the interal listener array at time of emit |
| | | // was [listener3,listener4] |
| | | |
| | | // Interal listener array [listener3] |
| | | ee.emit('hello'); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.once('hello', listener1); |
| | | ee.on('removeListener', common.mustCall(function(eventName, listener) { |
| | | assert.strictEqual(eventName, 'hello'); |
| | | assert.strictEqual(listener, listener1); |
| | | })); |
| | | ee.emit('hello'); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | |
| | | assert.strictEqual(ee, ee.removeListener('foo', function() {})); |
| | | } |
| | | |
| | | // Verify that the removed listener must be a function |
| | | assert.throws(function() { |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.removeListener('foo', null); |
| | | }, /^TypeError: The "listener" argument must be of type Function\. Received type object$/); |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | var listener = function() {}; |
| | | ee._events = undefined; |
| | | var e = ee.removeListener('foo', listener); |
| | | assert.strictEqual(e, ee); |
| | | } |
| | | |
| | | { |
| | | var ee = new EventEmitter(); |
| | | |
| | | ee.on('foo', listener1); |
| | | ee.on('foo', listener2); |
| | | var listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 2); |
| | | assert.strictEqual(listeners[0], listener1); |
| | | assert.strictEqual(listeners[1], listener2); |
| | | |
| | | ee.removeListener('foo', listener1); |
| | | assert.strictEqual(ee._events.foo, listener2); |
| | | |
| | | ee.on('foo', listener1); |
| | | listeners = ee.listeners('foo'); |
| | | assert.ok(Array.isArray(listeners)); |
| | | assert.strictEqual(listeners.length, 2); |
| | | assert.strictEqual(listeners[0], listener2); |
| | | assert.strictEqual(listeners[1], listener1); |
| | | |
| | | ee.removeListener('foo', listener1); |
| | | assert.strictEqual(ee._events.foo, listener2); |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | require('./common'); |
| | | var assert = require('assert'); |
| | | var events = require('../'); |
| | | |
| | | var e = new events.EventEmitter(); |
| | | |
| | | if (Object.create) assert.ok(!(e._events instanceof Object)); |
| | | assert.strictEqual(Object.keys(e._events).length, 0); |
| | | e.setMaxListeners(5); |
| | | assert.strictEqual(Object.keys(e._events).length, 0); |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | var common = require('./common'); |
| | | var EventEmitter = require('../'); |
| | | var assert = require('assert'); |
| | | |
| | | var ee = new EventEmitter(); |
| | | var handler = function() {}; |
| | | |
| | | assert.strictEqual(ee.eventNames().length, 0); |
| | | |
| | | assert.strictEqual(ee._events.hasOwnProperty, undefined); |
| | | assert.strictEqual(ee._events.toString, undefined); |
| | | |
| | | ee.on('__defineGetter__', handler); |
| | | ee.on('toString', handler); |
| | | ee.on('__proto__', handler); |
| | | |
| | | assert.strictEqual(ee.eventNames()[0], '__defineGetter__'); |
| | | assert.strictEqual(ee.eventNames()[1], 'toString'); |
| | | |
| | | assert.strictEqual(ee.listeners('__defineGetter__').length, 1); |
| | | assert.strictEqual(ee.listeners('__defineGetter__')[0], handler); |
| | | assert.strictEqual(ee.listeners('toString').length, 1); |
| | | assert.strictEqual(ee.listeners('toString')[0], handler); |
| | | |
| | | // Only run __proto__ tests if that property can actually be set |
| | | if ({ __proto__: 'ok' }.__proto__ === 'ok') { |
| | | assert.strictEqual(ee.eventNames().length, 3); |
| | | assert.strictEqual(ee.eventNames()[2], '__proto__'); |
| | | assert.strictEqual(ee.listeners('__proto__').length, 1); |
| | | assert.strictEqual(ee.listeners('__proto__')[0], handler); |
| | | |
| | | ee.on('__proto__', common.mustCall(function(val) { |
| | | assert.strictEqual(val, 1); |
| | | })); |
| | | ee.emit('__proto__', 1); |
| | | |
| | | process.on('__proto__', common.mustCall(function(val) { |
| | | assert.strictEqual(val, 1); |
| | | })); |
| | | process.emit('__proto__', 1); |
| | | } else { |
| | | console.log('# skipped __proto__') |
| | | } |
New file |
| | |
| | | // Copyright Joyent, Inc. and other Node contributors. |
| | | // |
| | | // Permission is hereby granted, free of charge, to any person obtaining a |
| | | // copy of this software and associated documentation files (the |
| | | // "Software"), to deal in the Software without restriction, including |
| | | // without limitation the rights to use, copy, modify, merge, publish, |
| | | // distribute, sublicense, and/or sell copies of the Software, and to permit |
| | | // persons to whom the Software is furnished to do so, subject to the |
| | | // following conditions: |
| | | // |
| | | // The above copyright notice and this permission notice shall be included |
| | | // in all copies or substantial portions of the Software. |
| | | // |
| | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| | | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN |
| | | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| | | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| | | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
| | | // USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | var common = require('./common'); |
| | | var test = require('tape'); |
| | | var assert = require('assert'); |
| | | var EventEmitter = require('../').EventEmitter; |
| | | var util = require('util'); |
| | | |
| | | util.inherits(MyEE, EventEmitter); |
| | | |
| | | function MyEE(cb) { |
| | | this.once(1, cb); |
| | | this.emit(1); |
| | | this.removeAllListeners(); |
| | | EventEmitter.call(this); |
| | | } |
| | | |
| | | var myee = new MyEE(common.mustCall()); |
| | | |
| | | |
| | | util.inherits(ErrorEE, EventEmitter); |
| | | function ErrorEE() { |
| | | this.emit('error', new Error('blerg')); |
| | | } |
| | | |
| | | assert.throws(function() { |
| | | new ErrorEE(); |
| | | }, /blerg/); |
| | | |
| | | test.onFinish(function() { |
| | | assert.ok(!(myee._events instanceof Object)); |
| | | assert.strictEqual(Object.keys(myee._events).length, 0); |
| | | }); |
| | | |
| | | |
| | | function MyEE2() { |
| | | EventEmitter.call(this); |
| | | } |
| | | |
| | | MyEE2.prototype = new EventEmitter(); |
| | | |
| | | var ee1 = new MyEE2(); |
| | | var ee2 = new MyEE2(); |
| | | |
| | | ee1.on('x', function() {}); |
| | | |
| | | assert.strictEqual(ee2.listenerCount('x'), 0); |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | var common = require('./common'); |
| | | var EventEmitter = require('../'); |
| | | var assert = require('assert'); |
| | | |
| | | var ee = new EventEmitter(); |
| | | var foo = Symbol('foo'); |
| | | var listener = common.mustCall(); |
| | | |
| | | ee.on(foo, listener); |
| | | assert.strictEqual(ee.listeners(foo).length, 1); |
| | | assert.strictEqual(ee.listeners(foo)[0], listener); |
| | | |
| | | ee.emit(foo); |
| | | |
| | | ee.removeAllListeners(); |
| | | assert.strictEqual(ee.listeners(foo).length, 0); |
| | | |
| | | ee.on(foo, listener); |
| | | assert.strictEqual(ee.listeners(foo).length, 1); |
| | | assert.strictEqual(ee.listeners(foo)[0], listener); |
| | | |
| | | ee.removeListener(foo, listener); |
| | | assert.strictEqual(ee.listeners(foo).length, 0); |
New file |
| | |
| | | # mini-html-parser2 |
| | | |
| | | ## 安装 |
| | | |
| | | ``` |
| | | $ npm install mini-html-parser2 --save |
| | | ``` |
| | | |
| | | ## 使用 |
| | | |
| | | ```js |
| | | // page.js |
| | | const html = `<div> |
| | | <span>test</span> |
| | | <div> |
| | | <span>table test</span> |
| | | <table> |
| | | <thead> |
| | | <tr> |
| | | <th>title</th> |
| | | <th>title</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | <tr> |
| | | <td colspan="2">yy</td> |
| | | <td>xx</td> |
| | | <td>xx</td> |
| | | <td>xx</td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div>` |
| | | import parse from 'mini-html-parser2'; |
| | | |
| | | Page({ |
| | | data: { |
| | | nodes: [], |
| | | }, |
| | | onLoad() { |
| | | parse(html, (err, nodes) => { |
| | | if (!err) { |
| | | this.setData({ |
| | | nodes, |
| | | }); |
| | | } |
| | | }) |
| | | }, |
| | | }) |
| | | ``` |
| | | |
| | | ```html |
| | | <!-- page.axml --> |
| | | <rich-text nodes="{{nodes}}" /> |
| | | ``` |
| | | |
| | | ## 运行测试 |
| | | |
| | | ``` |
| | | $ npm run build |
| | | $ npm test |
| | | ``` |
New file |
| | |
| | | declare function Parser(cbs: any, options: any): void; |
| | | export default Parser; |
New file |
| | |
| | | "use strict"; |
| | | |
| | | Object.defineProperty(exports, "__esModule", { |
| | | value: true |
| | | }); |
| | | var Tokenizer = require("./Tokenizer.js"); |
| | | /* |
| | | Options: |
| | | |
| | | xmlMode: Disables the special behavior for script/style tags (false by default) |
| | | lowerCaseAttributeNames: call .toLowerCase for each attribute name (true if xmlMode is `false`) |
| | | lowerCaseTags: call .toLowerCase for each tag name (true if xmlMode is `false`) |
| | | */ |
| | | /* |
| | | Callbacks: |
| | | |
| | | oncdataend, |
| | | oncdatastart, |
| | | onclosetag, |
| | | oncomment, |
| | | oncommentend, |
| | | onerror, |
| | | onopentag, |
| | | onprocessinginstruction, |
| | | onreset, |
| | | ontext |
| | | */ |
| | | var formTags = { |
| | | input: true, |
| | | option: true, |
| | | optgroup: true, |
| | | select: true, |
| | | button: true, |
| | | datalist: true, |
| | | textarea: true |
| | | }; |
| | | var openImpliesClose = { |
| | | tr: { tr: true, th: true, td: true }, |
| | | th: { th: true }, |
| | | td: { thead: true, th: true, td: true }, |
| | | body: { head: true, link: true, script: true }, |
| | | li: { li: true }, |
| | | p: { p: true }, |
| | | h1: { p: true }, |
| | | h2: { p: true }, |
| | | h3: { p: true }, |
| | | h4: { p: true }, |
| | | h5: { p: true }, |
| | | h6: { p: true }, |
| | | select: formTags, |
| | | input: formTags, |
| | | output: formTags, |
| | | button: formTags, |
| | | datalist: formTags, |
| | | textarea: formTags, |
| | | option: { option: true }, |
| | | optgroup: { optgroup: true } |
| | | }; |
| | | var voidElements = { |
| | | __proto__: null, |
| | | area: true, |
| | | base: true, |
| | | basefont: true, |
| | | br: true, |
| | | col: true, |
| | | command: true, |
| | | embed: true, |
| | | frame: true, |
| | | hr: true, |
| | | img: true, |
| | | input: true, |
| | | isindex: true, |
| | | keygen: true, |
| | | link: true, |
| | | meta: true, |
| | | param: true, |
| | | source: true, |
| | | track: true, |
| | | wbr: true |
| | | }; |
| | | var foreignContextElements = { |
| | | __proto__: null, |
| | | math: true, |
| | | svg: true |
| | | }; |
| | | var htmlIntegrationElements = { |
| | | __proto__: null, |
| | | mi: true, |
| | | mo: true, |
| | | mn: true, |
| | | ms: true, |
| | | mtext: true, |
| | | "annotation-xml": true, |
| | | foreignObject: true, |
| | | desc: true, |
| | | title: true |
| | | }; |
| | | var re_nameEnd = /\s|\//; |
| | | function Parser(cbs, options) { |
| | | this._options = options || {}; |
| | | this._cbs = cbs || {}; |
| | | this._tagname = ""; |
| | | this._attribname = ""; |
| | | this._attribvalue = ""; |
| | | this._attribs = null; |
| | | this._stack = []; |
| | | this._foreignContext = []; |
| | | this.startIndex = 0; |
| | | this.endIndex = null; |
| | | this._lowerCaseTagNames = "lowerCaseTags" in this._options ? !!this._options.lowerCaseTags : !this._options.xmlMode; |
| | | this._lowerCaseAttributeNames = "lowerCaseAttributeNames" in this._options ? !!this._options.lowerCaseAttributeNames : !this._options.xmlMode; |
| | | if (this._options.Tokenizer) { |
| | | Tokenizer = this._options.Tokenizer; |
| | | } |
| | | this._tokenizer = new Tokenizer(this._options, this); |
| | | if (this._cbs.onparserinit) this._cbs.onparserinit(this); |
| | | } |
| | | require("./inherits")(Parser, require("events").EventEmitter); |
| | | Parser.prototype._updatePosition = function (initialOffset) { |
| | | if (this.endIndex === null) { |
| | | if (this._tokenizer._sectionStart <= initialOffset) { |
| | | this.startIndex = 0; |
| | | } else { |
| | | this.startIndex = this._tokenizer._sectionStart - initialOffset; |
| | | } |
| | | } else this.startIndex = this.endIndex + 1; |
| | | this.endIndex = this._tokenizer.getAbsoluteIndex(); |
| | | }; |
| | | //Tokenizer event handlers |
| | | Parser.prototype.ontext = function (data) { |
| | | this._updatePosition(1); |
| | | this.endIndex--; |
| | | if (this._cbs.ontext) this._cbs.ontext(data); |
| | | }; |
| | | Parser.prototype.onopentagname = function (name) { |
| | | if (this._lowerCaseTagNames) { |
| | | name = name.toLowerCase(); |
| | | } |
| | | this._tagname = name; |
| | | if (!this._options.xmlMode && name in openImpliesClose) { |
| | | for (var el; (el = this._stack[this._stack.length - 1]) in openImpliesClose[name]; this.onclosetag(el)) {} |
| | | } |
| | | if (this._options.xmlMode || !(name in voidElements)) { |
| | | this._stack.push(name); |
| | | if (name in foreignContextElements) this._foreignContext.push(true);else if (name in htmlIntegrationElements) this._foreignContext.push(false); |
| | | } |
| | | if (this._cbs.onopentagname) this._cbs.onopentagname(name); |
| | | if (this._cbs.onopentag) this._attribs = {}; |
| | | }; |
| | | Parser.prototype.onopentagend = function () { |
| | | this._updatePosition(1); |
| | | if (this._attribs) { |
| | | if (this._cbs.onopentag) this._cbs.onopentag(this._tagname, this._attribs); |
| | | this._attribs = null; |
| | | } |
| | | if (!this._options.xmlMode && this._cbs.onclosetag && this._tagname in voidElements) { |
| | | this._cbs.onclosetag(this._tagname); |
| | | } |
| | | this._tagname = ""; |
| | | }; |
| | | Parser.prototype.onclosetag = function (name) { |
| | | this._updatePosition(1); |
| | | if (this._lowerCaseTagNames) { |
| | | name = name.toLowerCase(); |
| | | } |
| | | if (name in foreignContextElements || name in htmlIntegrationElements) { |
| | | this._foreignContext.pop(); |
| | | } |
| | | if (this._stack.length && (!(name in voidElements) || this._options.xmlMode)) { |
| | | var pos = this._stack.lastIndexOf(name); |
| | | if (pos !== -1) { |
| | | if (this._cbs.onclosetag) { |
| | | pos = this._stack.length - pos; |
| | | while (pos--) { |
| | | this._cbs.onclosetag(this._stack.pop()); |
| | | } |
| | | } else this._stack.length = pos; |
| | | } else if (name === "p" && !this._options.xmlMode) { |
| | | this.onopentagname(name); |
| | | this._closeCurrentTag(); |
| | | } |
| | | } else if (!this._options.xmlMode && (name === "br" || name === "p")) { |
| | | this.onopentagname(name); |
| | | this._closeCurrentTag(); |
| | | } |
| | | }; |
| | | Parser.prototype.onselfclosingtag = function () { |
| | | if (this._options.xmlMode || this._options.recognizeSelfClosing || this._foreignContext[this._foreignContext.length - 1]) { |
| | | this._closeCurrentTag(); |
| | | } else { |
| | | this.onopentagend(); |
| | | } |
| | | }; |
| | | Parser.prototype._closeCurrentTag = function () { |
| | | var name = this._tagname; |
| | | this.onopentagend(); |
| | | //self-closing tags will be on the top of the stack |
| | | //(cheaper check than in onclosetag) |
| | | if (this._stack[this._stack.length - 1] === name) { |
| | | if (this._cbs.onclosetag) { |
| | | this._cbs.onclosetag(name); |
| | | } |
| | | this._stack.pop(); |
| | | } |
| | | }; |
| | | Parser.prototype.onattribname = function (name) { |
| | | if (this._lowerCaseAttributeNames) { |
| | | name = name.toLowerCase(); |
| | | } |
| | | this._attribname = name; |
| | | }; |
| | | Parser.prototype.onattribdata = function (value) { |
| | | this._attribvalue += value; |
| | | }; |
| | | Parser.prototype.onattribend = function () { |
| | | if (this._cbs.onattribute) this._cbs.onattribute(this._attribname, this._attribvalue); |
| | | if (this._attribs && !Object.prototype.hasOwnProperty.call(this._attribs, this._attribname)) { |
| | | this._attribs[this._attribname] = this._attribvalue; |
| | | } |
| | | this._attribname = ""; |
| | | this._attribvalue = ""; |
| | | }; |
| | | Parser.prototype._getInstructionName = function (value) { |
| | | var idx = value.search(re_nameEnd), |
| | | name = idx < 0 ? value : value.substr(0, idx); |
| | | if (this._lowerCaseTagNames) { |
| | | name = name.toLowerCase(); |
| | | } |
| | | return name; |
| | | }; |
| | | Parser.prototype.ondeclaration = function (value) { |
| | | if (this._cbs.onprocessinginstruction) { |
| | | var name = this._getInstructionName(value); |
| | | this._cbs.onprocessinginstruction("!" + name, "!" + value); |
| | | } |
| | | }; |
| | | Parser.prototype.onprocessinginstruction = function (value) { |
| | | if (this._cbs.onprocessinginstruction) { |
| | | var name = this._getInstructionName(value); |
| | | this._cbs.onprocessinginstruction("?" + name, "?" + value); |
| | | } |
| | | }; |
| | | Parser.prototype.oncomment = function (value) { |
| | | this._updatePosition(4); |
| | | if (this._cbs.oncomment) this._cbs.oncomment(value); |
| | | if (this._cbs.oncommentend) this._cbs.oncommentend(); |
| | | }; |
| | | Parser.prototype.oncdata = function (value) { |
| | | this._updatePosition(1); |
| | | if (this._options.xmlMode || this._options.recognizeCDATA) { |
| | | if (this._cbs.oncdatastart) this._cbs.oncdatastart(); |
| | | if (this._cbs.ontext) this._cbs.ontext(value); |
| | | if (this._cbs.oncdataend) this._cbs.oncdataend(); |
| | | } else { |
| | | this.oncomment("[CDATA[" + value + "]]"); |
| | | } |
| | | }; |
| | | Parser.prototype.onerror = function (err) { |
| | | if (this._cbs.onerror) this._cbs.onerror(err); |
| | | }; |
| | | Parser.prototype.onend = function () { |
| | | if (this._cbs.onclosetag) { |
| | | for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) {} |
| | | } |
| | | if (this._cbs.onend) this._cbs.onend(); |
| | | }; |
| | | //Resets the parser to a blank state, ready to parse a new HTML document |
| | | Parser.prototype.reset = function () { |
| | | if (this._cbs.onreset) this._cbs.onreset(); |
| | | this._tokenizer.reset(); |
| | | this._tagname = ""; |
| | | this._attribname = ""; |
| | | this._attribs = null; |
| | | this._stack = []; |
| | | if (this._cbs.onparserinit) this._cbs.onparserinit(this); |
| | | }; |
| | | //Parses a complete HTML document and pushes it to the handler |
| | | Parser.prototype.parseComplete = function (data) { |
| | | this.reset(); |
| | | this.end(data); |
| | | }; |
| | | Parser.prototype.write = function (chunk) { |
| | | this._tokenizer.write(chunk); |
| | | }; |
| | | Parser.prototype.end = function (chunk) { |
| | | this._tokenizer.end(chunk); |
| | | }; |
| | | Parser.prototype.pause = function () { |
| | | this._tokenizer.pause(); |
| | | }; |
| | | Parser.prototype.resume = function () { |
| | | this._tokenizer.resume(); |
| | | }; |
| | | //alias for backwards compat |
| | | Parser.prototype.parseChunk = Parser.prototype.write; |
| | | Parser.prototype.done = Parser.prototype.end; |
| | | exports["default"] = Parser; |
| | | module.exports = exports['default']; |
New file |
| | |
| | | declare var decodeCodePoint: any; |
| | | declare var entityMap: {}; |
| | | declare var legacyMap: any; |
| | | declare var xmlMap: any; |
| | | declare var i: number; |
| | | declare var TEXT: number; |
| | | declare var BEFORE_TAG_NAME: number; |
| | | declare var IN_TAG_NAME: number; |
| | | declare var IN_SELF_CLOSING_TAG: number; |
| | | declare var BEFORE_CLOSING_TAG_NAME: number; |
| | | declare var IN_CLOSING_TAG_NAME: number; |
| | | declare var AFTER_CLOSING_TAG_NAME: number; |
| | | declare var BEFORE_ATTRIBUTE_NAME: number; |
| | | declare var IN_ATTRIBUTE_NAME: number; |
| | | declare var AFTER_ATTRIBUTE_NAME: number; |
| | | declare var BEFORE_ATTRIBUTE_VALUE: number; |
| | | declare var IN_ATTRIBUTE_VALUE_DQ: number; |
| | | declare var IN_ATTRIBUTE_VALUE_SQ: number; |
| | | declare var IN_ATTRIBUTE_VALUE_NQ: number; |
| | | declare var BEFORE_DECLARATION: number; |
| | | declare var IN_DECLARATION: number; |
| | | declare var IN_PROCESSING_INSTRUCTION: number; |
| | | declare var BEFORE_COMMENT: number; |
| | | declare var IN_COMMENT: number; |
| | | declare var AFTER_COMMENT_1: number; |
| | | declare var AFTER_COMMENT_2: number; |
| | | declare var BEFORE_CDATA_1: number; |
| | | declare var BEFORE_CDATA_2: number; |
| | | declare var BEFORE_CDATA_3: number; |
| | | declare var BEFORE_CDATA_4: number; |
| | | declare var BEFORE_CDATA_5: number; |
| | | declare var BEFORE_CDATA_6: number; |
| | | declare var IN_CDATA: number; |
| | | declare var AFTER_CDATA_1: number; |
| | | declare var AFTER_CDATA_2: number; |
| | | declare var BEFORE_SPECIAL: number; |
| | | declare var BEFORE_SPECIAL_END: number; |
| | | declare var BEFORE_SCRIPT_1: number; |
| | | declare var BEFORE_SCRIPT_2: number; |
| | | declare var BEFORE_SCRIPT_3: number; |
| | | declare var BEFORE_SCRIPT_4: number; |
| | | declare var BEFORE_SCRIPT_5: number; |
| | | declare var AFTER_SCRIPT_1: number; |
| | | declare var AFTER_SCRIPT_2: number; |
| | | declare var AFTER_SCRIPT_3: number; |
| | | declare var AFTER_SCRIPT_4: number; |
| | | declare var AFTER_SCRIPT_5: number; |
| | | declare var BEFORE_STYLE_1: number; |
| | | declare var BEFORE_STYLE_2: number; |
| | | declare var BEFORE_STYLE_3: number; |
| | | declare var BEFORE_STYLE_4: number; |
| | | declare var AFTER_STYLE_1: number; |
| | | declare var AFTER_STYLE_2: number; |
| | | declare var AFTER_STYLE_3: number; |
| | | declare var AFTER_STYLE_4: number; |
| | | declare var BEFORE_ENTITY: number; |
| | | declare var BEFORE_NUMERIC_ENTITY: number; |
| | | declare var IN_NAMED_ENTITY: number; |
| | | declare var IN_NUMERIC_ENTITY: number; |
| | | declare var IN_HEX_ENTITY: number; |
| | | declare var j: number; |
| | | declare var SPECIAL_NONE: number; |
| | | declare var SPECIAL_SCRIPT: number; |
| | | declare var SPECIAL_STYLE: number; |
| | | declare function whitespace(c: any): boolean; |
| | | declare function ifElseState(upper: any, SUCCESS: any, FAILURE: any): (c: any) => void; |
| | | declare function consumeSpecialNameChar(upper: any, NEXT_STATE: any): (c: any) => void; |
| | | declare function Tokenizer(options: any, cbs: any): void; |
New file |
| | |
| | | "use strict"; |
| | | |
| | | var decodeCodePoint = require("entities/lib/decode_codepoint.js"); |
| | | var entityMap = {}; |
| | | var legacyMap = require("entities/maps/legacy.json"); |
| | | var xmlMap = require("entities/maps/xml.json"); |
| | | var i = 0; |
| | | var TEXT = i++; |
| | | var BEFORE_TAG_NAME = i++; //after < |
| | | var IN_TAG_NAME = i++; |
| | | var IN_SELF_CLOSING_TAG = i++; |
| | | var BEFORE_CLOSING_TAG_NAME = i++; |
| | | var IN_CLOSING_TAG_NAME = i++; |
| | | var AFTER_CLOSING_TAG_NAME = i++; |
| | | //attributes |
| | | var BEFORE_ATTRIBUTE_NAME = i++; |
| | | var IN_ATTRIBUTE_NAME = i++; |
| | | var AFTER_ATTRIBUTE_NAME = i++; |
| | | var BEFORE_ATTRIBUTE_VALUE = i++; |
| | | var IN_ATTRIBUTE_VALUE_DQ = i++; // " |
| | | var IN_ATTRIBUTE_VALUE_SQ = i++; // ' |
| | | var IN_ATTRIBUTE_VALUE_NQ = i++; |
| | | //declarations |
| | | var BEFORE_DECLARATION = i++; // ! |
| | | var IN_DECLARATION = i++; |
| | | //processing instructions |
| | | var IN_PROCESSING_INSTRUCTION = i++; // ? |
| | | //comments |
| | | var BEFORE_COMMENT = i++; |
| | | var IN_COMMENT = i++; |
| | | var AFTER_COMMENT_1 = i++; |
| | | var AFTER_COMMENT_2 = i++; |
| | | //cdata |
| | | var BEFORE_CDATA_1 = i++; // [ |
| | | var BEFORE_CDATA_2 = i++; // C |
| | | var BEFORE_CDATA_3 = i++; // D |
| | | var BEFORE_CDATA_4 = i++; // A |
| | | var BEFORE_CDATA_5 = i++; // T |
| | | var BEFORE_CDATA_6 = i++; // A |
| | | var IN_CDATA = i++; // [ |
| | | var AFTER_CDATA_1 = i++; // ] |
| | | var AFTER_CDATA_2 = i++; // ] |
| | | //special tags |
| | | var BEFORE_SPECIAL = i++; //S |
| | | var BEFORE_SPECIAL_END = i++; //S |
| | | var BEFORE_SCRIPT_1 = i++; //C |
| | | var BEFORE_SCRIPT_2 = i++; //R |
| | | var BEFORE_SCRIPT_3 = i++; //I |
| | | var BEFORE_SCRIPT_4 = i++; //P |
| | | var BEFORE_SCRIPT_5 = i++; //T |
| | | var AFTER_SCRIPT_1 = i++; //C |
| | | var AFTER_SCRIPT_2 = i++; //R |
| | | var AFTER_SCRIPT_3 = i++; //I |
| | | var AFTER_SCRIPT_4 = i++; //P |
| | | var AFTER_SCRIPT_5 = i++; //T |
| | | var BEFORE_STYLE_1 = i++; //T |
| | | var BEFORE_STYLE_2 = i++; //Y |
| | | var BEFORE_STYLE_3 = i++; //L |
| | | var BEFORE_STYLE_4 = i++; //E |
| | | var AFTER_STYLE_1 = i++; //T |
| | | var AFTER_STYLE_2 = i++; //Y |
| | | var AFTER_STYLE_3 = i++; //L |
| | | var AFTER_STYLE_4 = i++; //E |
| | | var BEFORE_ENTITY = i++; //& |
| | | var BEFORE_NUMERIC_ENTITY = i++; //# |
| | | var IN_NAMED_ENTITY = i++; |
| | | var IN_NUMERIC_ENTITY = i++; |
| | | var IN_HEX_ENTITY = i++; //X |
| | | var j = 0; |
| | | var SPECIAL_NONE = j++; |
| | | var SPECIAL_SCRIPT = j++; |
| | | var SPECIAL_STYLE = j++; |
| | | function whitespace(c) { |
| | | return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r"; |
| | | } |
| | | function ifElseState(upper, SUCCESS, FAILURE) { |
| | | var lower = upper.toLowerCase(); |
| | | if (upper === lower) { |
| | | return function (c) { |
| | | if (c === lower) { |
| | | this._state = SUCCESS; |
| | | } else { |
| | | this._state = FAILURE; |
| | | this._index--; |
| | | } |
| | | }; |
| | | } else { |
| | | return function (c) { |
| | | if (c === lower || c === upper) { |
| | | this._state = SUCCESS; |
| | | } else { |
| | | this._state = FAILURE; |
| | | this._index--; |
| | | } |
| | | }; |
| | | } |
| | | } |
| | | function consumeSpecialNameChar(upper, NEXT_STATE) { |
| | | var lower = upper.toLowerCase(); |
| | | return function (c) { |
| | | if (c === lower || c === upper) { |
| | | this._state = NEXT_STATE; |
| | | } else { |
| | | this._state = IN_TAG_NAME; |
| | | this._index--; //consume the token again |
| | | } |
| | | }; |
| | | } |
| | | function Tokenizer(options, cbs) { |
| | | this._state = TEXT; |
| | | this._buffer = ""; |
| | | this._sectionStart = 0; |
| | | this._index = 0; |
| | | this._bufferOffset = 0; //chars removed from _buffer |
| | | this._baseState = TEXT; |
| | | this._special = SPECIAL_NONE; |
| | | this._cbs = cbs; |
| | | this._running = true; |
| | | this._ended = false; |
| | | this._xmlMode = !!(options && options.xmlMode); |
| | | this._decodeEntities = !!(options && options.decodeEntities); |
| | | } |
| | | Tokenizer.prototype._stateText = function (c) { |
| | | if (c === "<") { |
| | | if (this._index > this._sectionStart) { |
| | | this._cbs.ontext(this._getSection()); |
| | | } |
| | | this._state = BEFORE_TAG_NAME; |
| | | this._sectionStart = this._index; |
| | | } else if (this._decodeEntities && this._special === SPECIAL_NONE && c === "&") { |
| | | if (this._index > this._sectionStart) { |
| | | this._cbs.ontext(this._getSection()); |
| | | } |
| | | this._baseState = TEXT; |
| | | this._state = BEFORE_ENTITY; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeTagName = function (c) { |
| | | if (c === "/") { |
| | | this._state = BEFORE_CLOSING_TAG_NAME; |
| | | } else if (c === "<") { |
| | | this._cbs.ontext(this._getSection()); |
| | | this._sectionStart = this._index; |
| | | } else if (c === ">" || this._special !== SPECIAL_NONE || whitespace(c)) { |
| | | this._state = TEXT; |
| | | } else if (c === "!") { |
| | | this._state = BEFORE_DECLARATION; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (c === "?") { |
| | | this._state = IN_PROCESSING_INSTRUCTION; |
| | | this._sectionStart = this._index + 1; |
| | | } else { |
| | | this._state = !this._xmlMode && (c === "s" || c === "S") ? BEFORE_SPECIAL : IN_TAG_NAME; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInTagName = function (c) { |
| | | if (c === "/" || c === ">" || whitespace(c)) { |
| | | this._emitToken("onopentagname"); |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeCloseingTagName = function (c) { |
| | | if (whitespace(c)) {} else if (c === ">") { |
| | | this._state = TEXT; |
| | | } else if (this._special !== SPECIAL_NONE) { |
| | | if (c === "s" || c === "S") { |
| | | this._state = BEFORE_SPECIAL_END; |
| | | } else { |
| | | this._state = TEXT; |
| | | this._index--; |
| | | } |
| | | } else { |
| | | this._state = IN_CLOSING_TAG_NAME; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInCloseingTagName = function (c) { |
| | | if (c === ">" || whitespace(c)) { |
| | | this._emitToken("onclosetag"); |
| | | this._state = AFTER_CLOSING_TAG_NAME; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateAfterCloseingTagName = function (c) { |
| | | //skip everything until ">" |
| | | if (c === ">") { |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeAttributeName = function (c) { |
| | | if (c === ">") { |
| | | this._cbs.onopentagend(); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (c === "/") { |
| | | this._state = IN_SELF_CLOSING_TAG; |
| | | } else if (!whitespace(c)) { |
| | | this._state = IN_ATTRIBUTE_NAME; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInSelfClosingTag = function (c) { |
| | | if (c === ">") { |
| | | this._cbs.onselfclosingtag(); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (!whitespace(c)) { |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInAttributeName = function (c) { |
| | | if (c === "=" || c === "/" || c === ">" || whitespace(c)) { |
| | | this._cbs.onattribname(this._getSection()); |
| | | this._sectionStart = -1; |
| | | this._state = AFTER_ATTRIBUTE_NAME; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateAfterAttributeName = function (c) { |
| | | if (c === "=") { |
| | | this._state = BEFORE_ATTRIBUTE_VALUE; |
| | | } else if (c === "/" || c === ">") { |
| | | this._cbs.onattribend(); |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | this._index--; |
| | | } else if (!whitespace(c)) { |
| | | this._cbs.onattribend(); |
| | | this._state = IN_ATTRIBUTE_NAME; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeAttributeValue = function (c) { |
| | | if (c === '"') { |
| | | this._state = IN_ATTRIBUTE_VALUE_DQ; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (c === "'") { |
| | | this._state = IN_ATTRIBUTE_VALUE_SQ; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (!whitespace(c)) { |
| | | this._state = IN_ATTRIBUTE_VALUE_NQ; |
| | | this._sectionStart = this._index; |
| | | this._index--; //reconsume token |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInAttributeValueDoubleQuotes = function (c) { |
| | | if (c === '"') { |
| | | this._emitToken("onattribdata"); |
| | | this._cbs.onattribend(); |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | } else if (this._decodeEntities && c === "&") { |
| | | this._emitToken("onattribdata"); |
| | | this._baseState = this._state; |
| | | this._state = BEFORE_ENTITY; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInAttributeValueSingleQuotes = function (c) { |
| | | if (c === "'") { |
| | | this._emitToken("onattribdata"); |
| | | this._cbs.onattribend(); |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | } else if (this._decodeEntities && c === "&") { |
| | | this._emitToken("onattribdata"); |
| | | this._baseState = this._state; |
| | | this._state = BEFORE_ENTITY; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInAttributeValueNoQuotes = function (c) { |
| | | if (whitespace(c) || c === ">") { |
| | | this._emitToken("onattribdata"); |
| | | this._cbs.onattribend(); |
| | | this._state = BEFORE_ATTRIBUTE_NAME; |
| | | this._index--; |
| | | } else if (this._decodeEntities && c === "&") { |
| | | this._emitToken("onattribdata"); |
| | | this._baseState = this._state; |
| | | this._state = BEFORE_ENTITY; |
| | | this._sectionStart = this._index; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeDeclaration = function (c) { |
| | | this._state = c === "[" ? BEFORE_CDATA_1 : c === "-" ? BEFORE_COMMENT : IN_DECLARATION; |
| | | }; |
| | | Tokenizer.prototype._stateInDeclaration = function (c) { |
| | | if (c === ">") { |
| | | this._cbs.ondeclaration(this._getSection()); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInProcessingInstruction = function (c) { |
| | | if (c === ">") { |
| | | this._cbs.onprocessinginstruction(this._getSection()); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeComment = function (c) { |
| | | if (c === "-") { |
| | | this._state = IN_COMMENT; |
| | | this._sectionStart = this._index + 1; |
| | | } else { |
| | | this._state = IN_DECLARATION; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInComment = function (c) { |
| | | if (c === "-") this._state = AFTER_COMMENT_1; |
| | | }; |
| | | Tokenizer.prototype._stateAfterComment1 = function (c) { |
| | | if (c === "-") { |
| | | this._state = AFTER_COMMENT_2; |
| | | } else { |
| | | this._state = IN_COMMENT; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateAfterComment2 = function (c) { |
| | | if (c === ">") { |
| | | //remove 2 trailing chars |
| | | this._cbs.oncomment(this._buffer.substring(this._sectionStart, this._index - 2)); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (c !== "-") { |
| | | this._state = IN_COMMENT; |
| | | } |
| | | // else: stay in AFTER_COMMENT_2 (`--->`) |
| | | }; |
| | | Tokenizer.prototype._stateBeforeCdata1 = ifElseState("C", BEFORE_CDATA_2, IN_DECLARATION); |
| | | Tokenizer.prototype._stateBeforeCdata2 = ifElseState("D", BEFORE_CDATA_3, IN_DECLARATION); |
| | | Tokenizer.prototype._stateBeforeCdata3 = ifElseState("A", BEFORE_CDATA_4, IN_DECLARATION); |
| | | Tokenizer.prototype._stateBeforeCdata4 = ifElseState("T", BEFORE_CDATA_5, IN_DECLARATION); |
| | | Tokenizer.prototype._stateBeforeCdata5 = ifElseState("A", BEFORE_CDATA_6, IN_DECLARATION); |
| | | Tokenizer.prototype._stateBeforeCdata6 = function (c) { |
| | | if (c === "[") { |
| | | this._state = IN_CDATA; |
| | | this._sectionStart = this._index + 1; |
| | | } else { |
| | | this._state = IN_DECLARATION; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInCdata = function (c) { |
| | | if (c === "]") this._state = AFTER_CDATA_1; |
| | | }; |
| | | Tokenizer.prototype._stateAfterCdata1 = function (c) { |
| | | if (c === "]") this._state = AFTER_CDATA_2;else this._state = IN_CDATA; |
| | | }; |
| | | Tokenizer.prototype._stateAfterCdata2 = function (c) { |
| | | if (c === ">") { |
| | | //remove 2 trailing chars |
| | | this._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2)); |
| | | this._state = TEXT; |
| | | this._sectionStart = this._index + 1; |
| | | } else if (c !== "]") { |
| | | this._state = IN_CDATA; |
| | | } |
| | | //else: stay in AFTER_CDATA_2 (`]]]>`) |
| | | }; |
| | | Tokenizer.prototype._stateBeforeSpecial = function (c) { |
| | | if (c === "c" || c === "C") { |
| | | this._state = BEFORE_SCRIPT_1; |
| | | } else if (c === "t" || c === "T") { |
| | | this._state = BEFORE_STYLE_1; |
| | | } else { |
| | | this._state = IN_TAG_NAME; |
| | | this._index--; //consume the token again |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateBeforeSpecialEnd = function (c) { |
| | | if (this._special === SPECIAL_SCRIPT && (c === "c" || c === "C")) { |
| | | this._state = AFTER_SCRIPT_1; |
| | | } else if (this._special === SPECIAL_STYLE && (c === "t" || c === "T")) { |
| | | this._state = AFTER_STYLE_1; |
| | | } else this._state = TEXT; |
| | | }; |
| | | Tokenizer.prototype._stateBeforeScript1 = consumeSpecialNameChar("R", BEFORE_SCRIPT_2); |
| | | Tokenizer.prototype._stateBeforeScript2 = consumeSpecialNameChar("I", BEFORE_SCRIPT_3); |
| | | Tokenizer.prototype._stateBeforeScript3 = consumeSpecialNameChar("P", BEFORE_SCRIPT_4); |
| | | Tokenizer.prototype._stateBeforeScript4 = consumeSpecialNameChar("T", BEFORE_SCRIPT_5); |
| | | Tokenizer.prototype._stateBeforeScript5 = function (c) { |
| | | if (c === "/" || c === ">" || whitespace(c)) { |
| | | this._special = SPECIAL_SCRIPT; |
| | | } |
| | | this._state = IN_TAG_NAME; |
| | | this._index--; //consume the token again |
| | | }; |
| | | Tokenizer.prototype._stateAfterScript1 = ifElseState("R", AFTER_SCRIPT_2, TEXT); |
| | | Tokenizer.prototype._stateAfterScript2 = ifElseState("I", AFTER_SCRIPT_3, TEXT); |
| | | Tokenizer.prototype._stateAfterScript3 = ifElseState("P", AFTER_SCRIPT_4, TEXT); |
| | | Tokenizer.prototype._stateAfterScript4 = ifElseState("T", AFTER_SCRIPT_5, TEXT); |
| | | Tokenizer.prototype._stateAfterScript5 = function (c) { |
| | | if (c === ">" || whitespace(c)) { |
| | | this._special = SPECIAL_NONE; |
| | | this._state = IN_CLOSING_TAG_NAME; |
| | | this._sectionStart = this._index - 6; |
| | | this._index--; //reconsume the token |
| | | } else this._state = TEXT; |
| | | }; |
| | | Tokenizer.prototype._stateBeforeStyle1 = consumeSpecialNameChar("Y", BEFORE_STYLE_2); |
| | | Tokenizer.prototype._stateBeforeStyle2 = consumeSpecialNameChar("L", BEFORE_STYLE_3); |
| | | Tokenizer.prototype._stateBeforeStyle3 = consumeSpecialNameChar("E", BEFORE_STYLE_4); |
| | | Tokenizer.prototype._stateBeforeStyle4 = function (c) { |
| | | if (c === "/" || c === ">" || whitespace(c)) { |
| | | this._special = SPECIAL_STYLE; |
| | | } |
| | | this._state = IN_TAG_NAME; |
| | | this._index--; //consume the token again |
| | | }; |
| | | Tokenizer.prototype._stateAfterStyle1 = ifElseState("Y", AFTER_STYLE_2, TEXT); |
| | | Tokenizer.prototype._stateAfterStyle2 = ifElseState("L", AFTER_STYLE_3, TEXT); |
| | | Tokenizer.prototype._stateAfterStyle3 = ifElseState("E", AFTER_STYLE_4, TEXT); |
| | | Tokenizer.prototype._stateAfterStyle4 = function (c) { |
| | | if (c === ">" || whitespace(c)) { |
| | | this._special = SPECIAL_NONE; |
| | | this._state = IN_CLOSING_TAG_NAME; |
| | | this._sectionStart = this._index - 5; |
| | | this._index--; //reconsume the token |
| | | } else this._state = TEXT; |
| | | }; |
| | | Tokenizer.prototype._stateBeforeEntity = ifElseState("#", BEFORE_NUMERIC_ENTITY, IN_NAMED_ENTITY); |
| | | Tokenizer.prototype._stateBeforeNumericEntity = ifElseState("X", IN_HEX_ENTITY, IN_NUMERIC_ENTITY); |
| | | //for entities terminated with a semicolon |
| | | Tokenizer.prototype._parseNamedEntityStrict = function () { |
| | | //offset = 1 |
| | | if (this._sectionStart + 1 < this._index) { |
| | | var entity = this._buffer.substring(this._sectionStart + 1, this._index), |
| | | map = this._xmlMode ? xmlMap : entityMap; |
| | | if (map.hasOwnProperty(entity)) { |
| | | this._emitPartial(map[entity]); |
| | | this._sectionStart = this._index + 1; |
| | | } |
| | | } |
| | | }; |
| | | //parses legacy entities (without trailing semicolon) |
| | | Tokenizer.prototype._parseLegacyEntity = function () { |
| | | var start = this._sectionStart + 1, |
| | | limit = this._index - start; |
| | | if (limit > 6) limit = 6; //the max length of legacy entities is 6 |
| | | while (limit >= 2) { |
| | | //the min length of legacy entities is 2 |
| | | var entity = this._buffer.substr(start, limit); |
| | | if (legacyMap.hasOwnProperty(entity)) { |
| | | this._emitPartial(legacyMap[entity]); |
| | | this._sectionStart += limit + 1; |
| | | return; |
| | | } else { |
| | | limit--; |
| | | } |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInNamedEntity = function (c) { |
| | | if (c === ";") { |
| | | this._parseNamedEntityStrict(); |
| | | if (this._sectionStart + 1 < this._index && !this._xmlMode) { |
| | | this._parseLegacyEntity(); |
| | | } |
| | | this._state = this._baseState; |
| | | } else if ((c < "a" || c > "z") && (c < "A" || c > "Z") && (c < "0" || c > "9")) { |
| | | if (this._xmlMode) {} else if (this._sectionStart + 1 === this._index) {} else if (this._baseState !== TEXT) { |
| | | if (c !== "=") { |
| | | this._parseNamedEntityStrict(); |
| | | } |
| | | } else { |
| | | this._parseLegacyEntity(); |
| | | } |
| | | this._state = this._baseState; |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._decodeNumericEntity = function (offset, base) { |
| | | var sectionStart = this._sectionStart + offset; |
| | | if (sectionStart !== this._index) { |
| | | //parse entity |
| | | var entity = this._buffer.substring(sectionStart, this._index); |
| | | var parsed = parseInt(entity, base); |
| | | this._emitPartial(decodeCodePoint(parsed)); |
| | | this._sectionStart = this._index; |
| | | } else { |
| | | this._sectionStart--; |
| | | } |
| | | this._state = this._baseState; |
| | | }; |
| | | Tokenizer.prototype._stateInNumericEntity = function (c) { |
| | | if (c === ";") { |
| | | this._decodeNumericEntity(2, 10); |
| | | this._sectionStart++; |
| | | } else if (c < "0" || c > "9") { |
| | | if (!this._xmlMode) { |
| | | this._decodeNumericEntity(2, 10); |
| | | } else { |
| | | this._state = this._baseState; |
| | | } |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._stateInHexEntity = function (c) { |
| | | if (c === ";") { |
| | | this._decodeNumericEntity(3, 16); |
| | | this._sectionStart++; |
| | | } else if ((c < "a" || c > "f") && (c < "A" || c > "F") && (c < "0" || c > "9")) { |
| | | if (!this._xmlMode) { |
| | | this._decodeNumericEntity(3, 16); |
| | | } else { |
| | | this._state = this._baseState; |
| | | } |
| | | this._index--; |
| | | } |
| | | }; |
| | | Tokenizer.prototype._cleanup = function () { |
| | | if (this._sectionStart < 0) { |
| | | this._buffer = ""; |
| | | this._bufferOffset += this._index; |
| | | this._index = 0; |
| | | } else if (this._running) { |
| | | if (this._state === TEXT) { |
| | | if (this._sectionStart !== this._index) { |
| | | this._cbs.ontext(this._buffer.substr(this._sectionStart)); |
| | | } |
| | | this._buffer = ""; |
| | | this._bufferOffset += this._index; |
| | | this._index = 0; |
| | | } else if (this._sectionStart === this._index) { |
| | | //the section just started |
| | | this._buffer = ""; |
| | | this._bufferOffset += this._index; |
| | | this._index = 0; |
| | | } else { |
| | | //remove everything unnecessary |
| | | this._buffer = this._buffer.substr(this._sectionStart); |
| | | this._index -= this._sectionStart; |
| | | this._bufferOffset += this._sectionStart; |
| | | } |
| | | this._sectionStart = 0; |
| | | } |
| | | }; |
| | | //TODO make events conditional |
| | | Tokenizer.prototype.write = function (chunk) { |
| | | if (this._ended) this._cbs.onerror(Error(".write() after done!")); |
| | | this._buffer += chunk; |
| | | this._parse(); |
| | | }; |
| | | Tokenizer.prototype._parse = function () { |
| | | while (this._index < this._buffer.length && this._running) { |
| | | var c = this._buffer.charAt(this._index); |
| | | if (this._state === TEXT) { |
| | | this._stateText(c); |
| | | } else if (this._state === BEFORE_TAG_NAME) { |
| | | this._stateBeforeTagName(c); |
| | | } else if (this._state === IN_TAG_NAME) { |
| | | this._stateInTagName(c); |
| | | } else if (this._state === BEFORE_CLOSING_TAG_NAME) { |
| | | this._stateBeforeCloseingTagName(c); |
| | | } else if (this._state === IN_CLOSING_TAG_NAME) { |
| | | this._stateInCloseingTagName(c); |
| | | } else if (this._state === AFTER_CLOSING_TAG_NAME) { |
| | | this._stateAfterCloseingTagName(c); |
| | | } else if (this._state === IN_SELF_CLOSING_TAG) { |
| | | this._stateInSelfClosingTag(c); |
| | | } else if (this._state === BEFORE_ATTRIBUTE_NAME) { |
| | | /* |
| | | * attributes |
| | | */ |
| | | this._stateBeforeAttributeName(c); |
| | | } else if (this._state === IN_ATTRIBUTE_NAME) { |
| | | this._stateInAttributeName(c); |
| | | } else if (this._state === AFTER_ATTRIBUTE_NAME) { |
| | | this._stateAfterAttributeName(c); |
| | | } else if (this._state === BEFORE_ATTRIBUTE_VALUE) { |
| | | this._stateBeforeAttributeValue(c); |
| | | } else if (this._state === IN_ATTRIBUTE_VALUE_DQ) { |
| | | this._stateInAttributeValueDoubleQuotes(c); |
| | | } else if (this._state === IN_ATTRIBUTE_VALUE_SQ) { |
| | | this._stateInAttributeValueSingleQuotes(c); |
| | | } else if (this._state === IN_ATTRIBUTE_VALUE_NQ) { |
| | | this._stateInAttributeValueNoQuotes(c); |
| | | } else if (this._state === BEFORE_DECLARATION) { |
| | | /* |
| | | * declarations |
| | | */ |
| | | this._stateBeforeDeclaration(c); |
| | | } else if (this._state === IN_DECLARATION) { |
| | | this._stateInDeclaration(c); |
| | | } else if (this._state === IN_PROCESSING_INSTRUCTION) { |
| | | /* |
| | | * processing instructions |
| | | */ |
| | | this._stateInProcessingInstruction(c); |
| | | } else if (this._state === BEFORE_COMMENT) { |
| | | /* |
| | | * comments |
| | | */ |
| | | this._stateBeforeComment(c); |
| | | } else if (this._state === IN_COMMENT) { |
| | | this._stateInComment(c); |
| | | } else if (this._state === AFTER_COMMENT_1) { |
| | | this._stateAfterComment1(c); |
| | | } else if (this._state === AFTER_COMMENT_2) { |
| | | this._stateAfterComment2(c); |
| | | } else if (this._state === BEFORE_CDATA_1) { |
| | | /* |
| | | * cdata |
| | | */ |
| | | this._stateBeforeCdata1(c); |
| | | } else if (this._state === BEFORE_CDATA_2) { |
| | | this._stateBeforeCdata2(c); |
| | | } else if (this._state === BEFORE_CDATA_3) { |
| | | this._stateBeforeCdata3(c); |
| | | } else if (this._state === BEFORE_CDATA_4) { |
| | | this._stateBeforeCdata4(c); |
| | | } else if (this._state === BEFORE_CDATA_5) { |
| | | this._stateBeforeCdata5(c); |
| | | } else if (this._state === BEFORE_CDATA_6) { |
| | | this._stateBeforeCdata6(c); |
| | | } else if (this._state === IN_CDATA) { |
| | | this._stateInCdata(c); |
| | | } else if (this._state === AFTER_CDATA_1) { |
| | | this._stateAfterCdata1(c); |
| | | } else if (this._state === AFTER_CDATA_2) { |
| | | this._stateAfterCdata2(c); |
| | | } else if (this._state === BEFORE_SPECIAL) { |
| | | /* |
| | | * special tags |
| | | */ |
| | | this._stateBeforeSpecial(c); |
| | | } else if (this._state === BEFORE_SPECIAL_END) { |
| | | this._stateBeforeSpecialEnd(c); |
| | | } else if (this._state === BEFORE_SCRIPT_1) { |
| | | /* |
| | | * script |
| | | */ |
| | | this._stateBeforeScript1(c); |
| | | } else if (this._state === BEFORE_SCRIPT_2) { |
| | | this._stateBeforeScript2(c); |
| | | } else if (this._state === BEFORE_SCRIPT_3) { |
| | | this._stateBeforeScript3(c); |
| | | } else if (this._state === BEFORE_SCRIPT_4) { |
| | | this._stateBeforeScript4(c); |
| | | } else if (this._state === BEFORE_SCRIPT_5) { |
| | | this._stateBeforeScript5(c); |
| | | } else if (this._state === AFTER_SCRIPT_1) { |
| | | this._stateAfterScript1(c); |
| | | } else if (this._state === AFTER_SCRIPT_2) { |
| | | this._stateAfterScript2(c); |
| | | } else if (this._state === AFTER_SCRIPT_3) { |
| | | this._stateAfterScript3(c); |
| | | } else if (this._state === AFTER_SCRIPT_4) { |
| | | this._stateAfterScript4(c); |
| | | } else if (this._state === AFTER_SCRIPT_5) { |
| | | this._stateAfterScript5(c); |
| | | } else if (this._state === BEFORE_STYLE_1) { |
| | | /* |
| | | * style |
| | | */ |
| | | this._stateBeforeStyle1(c); |
| | | } else if (this._state === BEFORE_STYLE_2) { |
| | | this._stateBeforeStyle2(c); |
| | | } else if (this._state === BEFORE_STYLE_3) { |
| | | this._stateBeforeStyle3(c); |
| | | } else if (this._state === BEFORE_STYLE_4) { |
| | | this._stateBeforeStyle4(c); |
| | | } else if (this._state === AFTER_STYLE_1) { |
| | | this._stateAfterStyle1(c); |
| | | } else if (this._state === AFTER_STYLE_2) { |
| | | this._stateAfterStyle2(c); |
| | | } else if (this._state === AFTER_STYLE_3) { |
| | | this._stateAfterStyle3(c); |
| | | } else if (this._state === AFTER_STYLE_4) { |
| | | this._stateAfterStyle4(c); |
| | | } else if (this._state === BEFORE_ENTITY) { |
| | | /* |
| | | * entities |
| | | */ |
| | | this._stateBeforeEntity(c); |
| | | } else if (this._state === BEFORE_NUMERIC_ENTITY) { |
| | | this._stateBeforeNumericEntity(c); |
| | | } else if (this._state === IN_NAMED_ENTITY) { |
| | | this._stateInNamedEntity(c); |
| | | } else if (this._state === IN_NUMERIC_ENTITY) { |
| | | this._stateInNumericEntity(c); |
| | | } else if (this._state === IN_HEX_ENTITY) { |
| | | this._stateInHexEntity(c); |
| | | } else { |
| | | this._cbs.onerror(Error("unknown _state"), this._state); |
| | | } |
| | | this._index++; |
| | | } |
| | | this._cleanup(); |
| | | }; |
| | | Tokenizer.prototype.pause = function () { |
| | | this._running = false; |
| | | }; |
| | | Tokenizer.prototype.resume = function () { |
| | | this._running = true; |
| | | if (this._index < this._buffer.length) { |
| | | this._parse(); |
| | | } |
| | | if (this._ended) { |
| | | this._finish(); |
| | | } |
| | | }; |
| | | Tokenizer.prototype.end = function (chunk) { |
| | | if (this._ended) this._cbs.onerror(Error(".end() after done!")); |
| | | if (chunk) this.write(chunk); |
| | | this._ended = true; |
| | | if (this._running) this._finish(); |
| | | }; |
| | | Tokenizer.prototype._finish = function () { |
| | | //if there is remaining data, emit it in a reasonable way |
| | | if (this._sectionStart < this._index) { |
| | | this._handleTrailingData(); |
| | | } |
| | | this._cbs.onend(); |
| | | }; |
| | | Tokenizer.prototype._handleTrailingData = function () { |
| | | var data = this._buffer.substr(this._sectionStart); |
| | | if (this._state === IN_CDATA || this._state === AFTER_CDATA_1 || this._state === AFTER_CDATA_2) { |
| | | this._cbs.oncdata(data); |
| | | } else if (this._state === IN_COMMENT || this._state === AFTER_COMMENT_1 || this._state === AFTER_COMMENT_2) { |
| | | this._cbs.oncomment(data); |
| | | } else if (this._state === IN_NAMED_ENTITY && !this._xmlMode) { |
| | | this._parseLegacyEntity(); |
| | | if (this._sectionStart < this._index) { |
| | | this._state = this._baseState; |
| | | this._handleTrailingData(); |
| | | } |
| | | } else if (this._state === IN_NUMERIC_ENTITY && !this._xmlMode) { |
| | | this._decodeNumericEntity(2, 10); |
| | | if (this._sectionStart < this._index) { |
| | | this._state = this._baseState; |
| | | this._handleTrailingData(); |
| | | } |
| | | } else if (this._state === IN_HEX_ENTITY && !this._xmlMode) { |
| | | this._decodeNumericEntity(3, 16); |
| | | if (this._sectionStart < this._index) { |
| | | this._state = this._baseState; |
| | | this._handleTrailingData(); |
| | | } |
| | | } else if (this._state !== IN_TAG_NAME && this._state !== BEFORE_ATTRIBUTE_NAME && this._state !== BEFORE_ATTRIBUTE_VALUE && this._state !== AFTER_ATTRIBUTE_NAME && this._state !== IN_ATTRIBUTE_NAME && this._state !== IN_ATTRIBUTE_VALUE_SQ && this._state !== IN_ATTRIBUTE_VALUE_DQ && this._state !== IN_ATTRIBUTE_VALUE_NQ && this._state !== IN_CLOSING_TAG_NAME) { |
| | | this._cbs.ontext(data); |
| | | } |
| | | //else, ignore remaining data |
| | | //TODO add a way to remove current tag |
| | | }; |
| | | Tokenizer.prototype.reset = function () { |
| | | Tokenizer.call(this, { xmlMode: this._xmlMode, decodeEntities: this._decodeEntities }, this._cbs); |
| | | }; |
| | | Tokenizer.prototype.getAbsoluteIndex = function () { |
| | | return this._bufferOffset + this._index; |
| | | }; |
| | | Tokenizer.prototype._getSection = function () { |
| | | return this._buffer.substring(this._sectionStart, this._index); |
| | | }; |
| | | Tokenizer.prototype._emitToken = function (name) { |
| | | this._cbs[name](this._getSection()); |
| | | this._sectionStart = -1; |
| | | }; |
| | | Tokenizer.prototype._emitPartial = function (value) { |
| | | if (this._baseState !== TEXT) { |
| | | this._cbs.onattribdata(value); //TODO implement the new event |
| | | } else { |
| | | this._cbs.ontext(value); |
| | | } |
| | | }; |
| | | module.exports = Tokenizer; |
New file |
| | |
| | | export default function parse(html: any, done: any): void; |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | Object.defineProperty(exports, "__esModule", { |
| | | value: true |
| | | }); |
| | | exports['default'] = parse; |
| | | |
| | | var _domhandler = require('domhandler'); |
| | | |
| | | var _domhandler2 = _interopRequireDefault(_domhandler); |
| | | |
| | | var _Parser = require('./Parser'); |
| | | |
| | | var _Parser2 = _interopRequireDefault(_Parser); |
| | | |
| | | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
| | | |
| | | function transformNode(node) { |
| | | if (['tag', 'text'].indexOf(node.type) === -1) { |
| | | throw new Error('not supported name ' + node.name + ' of type ' + node.type); |
| | | } |
| | | if (node.type === 'text') { |
| | | return { |
| | | type: node.type, |
| | | text: node.data |
| | | }; |
| | | } |
| | | return { |
| | | name: node.name, |
| | | children: transform(node.children), |
| | | attrs: node.attribs |
| | | }; |
| | | } |
| | | function transform(nodes) { |
| | | return nodes.map(transformNode); |
| | | } |
| | | function parse(html, done) { |
| | | var handler = new _domhandler2['default'](function (err, children) { |
| | | if (err) { |
| | | console.error(err); |
| | | done(err); |
| | | } |
| | | try { |
| | | done(null, transform(children)); |
| | | } catch (e) { |
| | | console.error(e); |
| | | done(e); |
| | | } |
| | | }, {}); |
| | | var parser = new _Parser2['default'](handler, { xmlMode: true }); |
| | | parser.write(html); |
| | | parser.done(); |
| | | } |
| | | module.exports = exports['default']; |
New file |
| | |
| | | 'use strict'; |
| | | |
| | | if (typeof Object.create === 'function') { |
| | | // implementation from standard node.js 'util' module |
| | | module.exports = function inherits(ctor, superCtor) { |
| | | ctor.super_ = superCtor; |
| | | ctor.prototype = Object.create(superCtor.prototype, { |
| | | constructor: { |
| | | value: ctor, |
| | | enumerable: false, |
| | | writable: true, |
| | | configurable: true |
| | | } |
| | | }); |
| | | }; |
| | | } else { |
| | | // old school shim for old browsers |
| | | module.exports = function inherits(ctor, superCtor) { |
| | | ctor.super_ = superCtor; |
| | | var TempCtor = function TempCtor() {}; |
| | | TempCtor.prototype = superCtor.prototype; |
| | | ctor.prototype = new TempCtor(); |
| | | ctor.prototype.constructor = ctor; |
| | | }; |
| | | } |
New file |
| | |
| | | { |
| | | "_from": "mini-html-parser2", |
| | | "_id": "mini-html-parser2@0.2.0", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-SvDQmbQorG8LANarEnsuJBSrMwhHuXb4PK0oDix5ThqA5xNtgQjswxeJTqfP6+JEyQ5195Qlcpexej5zjSmLjA==", |
| | | "_location": "/mini-html-parser2", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "tag", |
| | | "registry": true, |
| | | "raw": "mini-html-parser2", |
| | | "name": "mini-html-parser2", |
| | | "escapedName": "mini-html-parser2", |
| | | "rawSpec": "", |
| | | "saveSpec": null, |
| | | "fetchSpec": "latest" |
| | | }, |
| | | "_requiredBy": [ |
| | | "#USER", |
| | | "/" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/mini-html-parser2/-/mini-html-parser2-0.2.0.tgz", |
| | | "_shasum": "15de582fc10afd7dfed5407572b4c65c501bfba3", |
| | | "_spec": "mini-html-parser2", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky", |
| | | "author": { |
| | | "name": "issac.lj@alibaba-inc.com" |
| | | }, |
| | | "bugs": { |
| | | "url": "https://github.com/ant-mini-program/mini-html-parser/issues" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "dependencies": { |
| | | "domhandler": "^2.4.2", |
| | | "entities": "^1.1.1", |
| | | "events": "^3.0.0" |
| | | }, |
| | | "deprecated": false, |
| | | "description": "小程序富文本", |
| | | "devDependencies": { |
| | | "@types/node": "^11.9.6", |
| | | "jest": "^23.6.0", |
| | | "rc-tools": "^8.1.5" |
| | | }, |
| | | "files": [ |
| | | "lib" |
| | | ], |
| | | "homepage": "https://github.com/ant-mini-program/mini-html-parser#readme", |
| | | "keywords": [ |
| | | "rich-text", |
| | | "mini-program", |
| | | "html-parser" |
| | | ], |
| | | "main": "lib/index.js", |
| | | "name": "mini-html-parser2", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git+ssh://git@github.com/ant-mini-program/mini-html-parser.git" |
| | | }, |
| | | "scripts": { |
| | | "build": "rc-tools run compile", |
| | | "pub": "git push origin && npm run build && npm publish", |
| | | "test": "jest" |
| | | }, |
| | | "version": "0.2.0" |
| | | } |
New file |
| | |
| | | .bc-container { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
New file |
| | |
| | | <block a:if="{{ show }}"> |
| | | <component |
| | | a:for="{{ info }}" |
| | | a:for-item="item" |
| | | is="{{ item.path }}" |
| | | bc-id="{{ item.apId }}" |
| | | ext="{{ ext }}" |
| | | ></component> |
| | | </block> |
New file |
| | |
| | | "use strict"; |
| | | Object.defineProperty(exports, "__esModule", { value: true }); |
| | | var tslib_1 = require("tslib"); |
| | | var index_1 = require("../index"); |
| | | Component({ |
| | | initInvoke: false, |
| | | mixins: [], |
| | | data: { |
| | | show: false, |
| | | info: [], |
| | | }, |
| | | props: { |
| | | name: '', |
| | | code: '', |
| | | ext: {}, |
| | | }, |
| | | onInit: function () { |
| | | this.initInvoke = true; |
| | | this.init(); |
| | | }, |
| | | didMount: function () { |
| | | if (!this.initInvoke) |
| | | this.init(); |
| | | }, |
| | | didUpdate: function () { }, |
| | | didUnmount: function () { }, |
| | | methods: { |
| | | init: function () { |
| | | return tslib_1.__awaiter(this, void 0, void 0, function () { |
| | | var pluginMethods, info; |
| | | return tslib_1.__generator(this, function (_a) { |
| | | switch (_a.label) { |
| | | case 0: |
| | | pluginMethods = index_1.getPluginMethods(); |
| | | if (!pluginMethods) { |
| | | if (typeof this.props.onError === 'function') |
| | | this.props.onError({ msg: 'pluginMethods is undefined', code: this.props.code, name: this.props.name }); |
| | | throw new Error('pluginMethods is undefined'); |
| | | } |
| | | return [4, pluginMethods.getComponentByCode(this.props.code, this.props.name)]; |
| | | case 1: |
| | | info = _a.sent(); |
| | | if (!info) { |
| | | if (typeof this.props.onError === 'function') |
| | | this.props.onError({ msg: 'module not found', code: this.props.code, name: this.props.name }); |
| | | throw new Error('module not found'); |
| | | } |
| | | this.setData({ show: true, info: info }); |
| | | return [2]; |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | }); |
| | | //# sourceMappingURL=bc-module.js.map |
New file |
| | |
| | | {"version":3,"file":"bc-module.js","sourceRoot":"","sources":["../../bc-module/bc-module.js"],"names":[],"mappings":";;;AAAA,kCAA4C;AAE5C,SAAS,CAAC;IACR,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE;KACT;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;KACR;IACD,MAAM;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IACD,QAAQ;QAEN,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IACD,SAAS,gBAAI,CAAC;IACd,UAAU,gBAAI,CAAC;IACf,OAAO,EAAE;QACD,IAAI;;;;;;4BACF,aAAa,GAAG,wBAAgB,EAAE,CAAC;4BAEzC,IAAI,CAAC,aAAa,EAAE;gCAClB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU;oCAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gCAC1G,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;6BAC/C;4BAEU,WAAM,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA/E,IAAI,GAAG,SAAwE;4BAEnF,IAAI,CAAC,IAAI,EAAE;gCACT,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU;oCAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gCAChG,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;6BACrC;4BAED,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;;;;;SACpC;KACF;CACF,CAAC,CAAC"} |
New file |
| | |
| | | { |
| | | "component": true, |
| | | "usingComponents": {} |
| | | } |
New file |
| | |
| | | "use strict"; |
| | | var tslib_1 = require("tslib"); |
| | | var pluginMethods; |
| | | var pluginId = '2021001161608103'; |
| | | function loadBC() { |
| | | var args = []; |
| | | for (var _i = 0; _i < arguments.length; _i++) { |
| | | args[_i] = arguments[_i]; |
| | | } |
| | | var plugin = pluginId + "@*"; |
| | | return new Promise(function (res, rej) { |
| | | my.loadPlugin({ |
| | | plugin: plugin, |
| | | success: function () { |
| | | pluginMethods = requirePlugin("dynamic-plugin://" + pluginId); |
| | | pluginMethods |
| | | .init.apply(pluginMethods, tslib_1.__spreadArrays([my], args)).then(function (data) { |
| | | res({ success: true }); |
| | | }) |
| | | .catch(function (err) { |
| | | rej({ msg: "bc plugin load config fail", err: err, success: false }); |
| | | }); |
| | | }, |
| | | fail: function (err) { |
| | | rej({ msg: "plugin: " + plugin + " load fail", err: err, success: false }); |
| | | }, |
| | | }); |
| | | }); |
| | | } |
| | | function getPluginMethods() { |
| | | return pluginMethods; |
| | | } |
| | | module.exports = { loadBC: loadBC, getPluginMethods: getPluginMethods }; |
| | | //# sourceMappingURL=index.js.map |
New file |
| | |
| | | {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":";;AAAA,IAAI,aAAa,CAAC;AAElB,IAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,SAAS,MAAM;IAAC,cAAO;SAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;QAAP,yBAAO;;IACrB,IAAM,MAAM,GAAM,QAAQ,OAAI,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAC,UAAC,GAAG,EAAE,GAAG;QAC1B,EAAE,CAAC,UAAU,CAAC;YACZ,MAAM,QAAA;YACN,OAAO,EAAE;gBACP,aAAa,GAAG,aAAa,CAAC,sBAAoB,QAAU,CAAC,CAAC;gBAC9D,aAAa;qBACV,IAAI,OADP,aAAa,0BACL,EAAE,GAAK,IAAI,GAChB,IAAI,CAAC,UAAC,IAAI;oBACT,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzB,CAAC,CAAC;qBACD,KAAK,CAAC,UAAC,GAAG;oBACT,GAAG,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,GAAG,KAAA,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClE,CAAC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,EAAE,UAAC,GAAG;gBACR,GAAG,CAAC,EAAE,GAAG,EAAE,aAAW,MAAM,eAAY,EAAE,GAAG,KAAA,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,EAAE,MAAM,QAAA,EAAE,gBAAgB,kBAAA,EAAE,CAAC"} |
New file |
| | |
| | | { |
| | | "_from": "miniapp-bc-user", |
| | | "_id": "miniapp-bc-user@0.0.4", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-BitiMSKR/Z+GnXiz/rZKUbLVoQ0pjlN0DSW96Rh1gaNJ/nPltCdWxQ+Vg1Y6GR8VTC3cnHcsHy1jpehxsmPAtg==", |
| | | "_location": "/miniapp-bc-user", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "tag", |
| | | "registry": true, |
| | | "raw": "miniapp-bc-user", |
| | | "name": "miniapp-bc-user", |
| | | "escapedName": "miniapp-bc-user", |
| | | "rawSpec": "", |
| | | "saveSpec": null, |
| | | "fetchSpec": "latest" |
| | | }, |
| | | "_requiredBy": [ |
| | | "#USER", |
| | | "/" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/miniapp-bc-user/-/miniapp-bc-user-0.0.4.tgz", |
| | | "_shasum": "e3ba151a45f131d9dad94574fac7b62773ee1fbd", |
| | | "_spec": "miniapp-bc-user", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky", |
| | | "author": "", |
| | | "bundleDependencies": false, |
| | | "dependencies": { |
| | | "tslib": "^1.11.1" |
| | | }, |
| | | "deprecated": false, |
| | | "description": "", |
| | | "files": [ |
| | | "es" |
| | | ], |
| | | "license": "ISC", |
| | | "main": "./es/index.js", |
| | | "name": "miniapp-bc-user", |
| | | "publishConfig": { |
| | | "registry": "https://registry.npmjs.org/" |
| | | }, |
| | | "scripts": {}, |
| | | "version": "0.0.4" |
| | | } |
New file |
| | |
| | | /*! ***************************************************************************** |
| | | Copyright (c) Microsoft Corporation. |
| | | |
| | | Permission to use, copy, modify, and/or distribute this software for any |
| | | purpose with or without fee is hereby granted. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| | | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| | | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| | | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| | | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| | | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| | | PERFORMANCE OF THIS SOFTWARE. |
| | | ***************************************************************************** */ |
| | | |
New file |
| | |
| | | Copyright (c) Microsoft Corporation. |
| | | |
| | | Permission to use, copy, modify, and/or distribute this software for any |
| | | purpose with or without fee is hereby granted. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| | | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| | | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| | | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| | | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| | | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| | | PERFORMANCE OF THIS SOFTWARE. |
New file |
| | |
| | | # tslib |
| | | |
| | | This is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions. |
| | | |
| | | This library is primarily used by the `--importHelpers` flag in TypeScript. |
| | | When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file: |
| | | |
| | | ```ts |
| | | var __assign = (this && this.__assign) || Object.assign || function(t) { |
| | | for (var s, i = 1, n = arguments.length; i < n; i++) { |
| | | s = arguments[i]; |
| | | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) |
| | | t[p] = s[p]; |
| | | } |
| | | return t; |
| | | }; |
| | | exports.x = {}; |
| | | exports.y = __assign({}, exports.x); |
| | | |
| | | ``` |
| | | |
| | | will instead be emitted as something like the following: |
| | | |
| | | ```ts |
| | | var tslib_1 = require("tslib"); |
| | | exports.x = {}; |
| | | exports.y = tslib_1.__assign({}, exports.x); |
| | | ``` |
| | | |
| | | Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead. |
| | | For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`. |
| | | |
| | | # Installing |
| | | |
| | | For the latest stable version, run: |
| | | |
| | | ## npm |
| | | |
| | | ```sh |
| | | # TypeScript 2.3.3 or later |
| | | npm install tslib |
| | | |
| | | # TypeScript 2.3.2 or earlier |
| | | npm install tslib@1.6.1 |
| | | ``` |
| | | |
| | | ## yarn |
| | | |
| | | ```sh |
| | | # TypeScript 2.3.3 or later |
| | | yarn add tslib |
| | | |
| | | # TypeScript 2.3.2 or earlier |
| | | yarn add tslib@1.6.1 |
| | | ``` |
| | | |
| | | ## bower |
| | | |
| | | ```sh |
| | | # TypeScript 2.3.3 or later |
| | | bower install tslib |
| | | |
| | | # TypeScript 2.3.2 or earlier |
| | | bower install tslib@1.6.1 |
| | | ``` |
| | | |
| | | ## JSPM |
| | | |
| | | ```sh |
| | | # TypeScript 2.3.3 or later |
| | | jspm install tslib |
| | | |
| | | # TypeScript 2.3.2 or earlier |
| | | jspm install tslib@1.6.1 |
| | | ``` |
| | | |
| | | # Usage |
| | | |
| | | Set the `importHelpers` compiler option on the command line: |
| | | |
| | | ``` |
| | | tsc --importHelpers file.ts |
| | | ``` |
| | | |
| | | or in your tsconfig.json: |
| | | |
| | | ```json |
| | | { |
| | | "compilerOptions": { |
| | | "importHelpers": true |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### For bower and JSPM users |
| | | |
| | | You will need to add a `paths` mapping for `tslib`, e.g. For Bower users: |
| | | |
| | | ```json |
| | | { |
| | | "compilerOptions": { |
| | | "module": "amd", |
| | | "importHelpers": true, |
| | | "baseUrl": "./", |
| | | "paths": { |
| | | "tslib" : ["bower_components/tslib/tslib.d.ts"] |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | For JSPM users: |
| | | |
| | | ```json |
| | | { |
| | | "compilerOptions": { |
| | | "module": "system", |
| | | "importHelpers": true, |
| | | "baseUrl": "./", |
| | | "paths": { |
| | | "tslib" : ["jspm_packages/npm/tslib@1.[version].0/tslib.d.ts"] |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | |
| | | # Contribute |
| | | |
| | | There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. |
| | | |
| | | * [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. |
| | | * Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). |
| | | * Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript). |
| | | * Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter. |
| | | * [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). |
| | | |
| | | # Documentation |
| | | |
| | | * [Quick tutorial](http://www.typescriptlang.org/Tutorial) |
| | | * [Programming handbook](http://www.typescriptlang.org/Handbook) |
| | | * [Homepage](http://www.typescriptlang.org/) |
New file |
| | |
| | | import tslib from '../tslib.js'; |
| | | const { |
| | | __extends, |
| | | __assign, |
| | | __rest, |
| | | __decorate, |
| | | __param, |
| | | __metadata, |
| | | __awaiter, |
| | | __generator, |
| | | __exportStar, |
| | | __createBinding, |
| | | __values, |
| | | __read, |
| | | __spread, |
| | | __spreadArrays, |
| | | __await, |
| | | __asyncGenerator, |
| | | __asyncDelegator, |
| | | __asyncValues, |
| | | __makeTemplateObject, |
| | | __importStar, |
| | | __importDefault, |
| | | __classPrivateFieldGet, |
| | | __classPrivateFieldSet, |
| | | } = tslib; |
| | | export { |
| | | __extends, |
| | | __assign, |
| | | __rest, |
| | | __decorate, |
| | | __param, |
| | | __metadata, |
| | | __awaiter, |
| | | __generator, |
| | | __exportStar, |
| | | __createBinding, |
| | | __values, |
| | | __read, |
| | | __spread, |
| | | __spreadArrays, |
| | | __await, |
| | | __asyncGenerator, |
| | | __asyncDelegator, |
| | | __asyncValues, |
| | | __makeTemplateObject, |
| | | __importStar, |
| | | __importDefault, |
| | | __classPrivateFieldGet, |
| | | __classPrivateFieldSet, |
| | | }; |
New file |
| | |
| | | { |
| | | "type": "module" |
| | | } |
New file |
| | |
| | | { |
| | | "_from": "tslib@^1.11.1", |
| | | "_id": "tslib@1.14.1", |
| | | "_inBundle": false, |
| | | "_integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", |
| | | "_location": "/tslib", |
| | | "_phantomChildren": {}, |
| | | "_requested": { |
| | | "type": "range", |
| | | "registry": true, |
| | | "raw": "tslib@^1.11.1", |
| | | "name": "tslib", |
| | | "escapedName": "tslib", |
| | | "rawSpec": "^1.11.1", |
| | | "saveSpec": null, |
| | | "fetchSpec": "^1.11.1" |
| | | }, |
| | | "_requiredBy": [ |
| | | "/miniapp-bc-user" |
| | | ], |
| | | "_resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", |
| | | "_shasum": "cf2d38bdc34a134bcaf1091c41f6619e2f672d00", |
| | | "_spec": "tslib@^1.11.1", |
| | | "_where": "D:\\workspace\\zfb\\MiniProjects\\DayLucky\\node_modules\\miniapp-bc-user", |
| | | "author": { |
| | | "name": "Microsoft Corp." |
| | | }, |
| | | "bugs": { |
| | | "url": "https://github.com/Microsoft/TypeScript/issues" |
| | | }, |
| | | "bundleDependencies": false, |
| | | "deprecated": false, |
| | | "description": "Runtime library for TypeScript helper functions", |
| | | "exports": { |
| | | ".": { |
| | | "module": "./tslib.es6.js", |
| | | "import": "./modules/index.js", |
| | | "default": "./tslib.js" |
| | | }, |
| | | "./": "./" |
| | | }, |
| | | "homepage": "https://www.typescriptlang.org/", |
| | | "jsnext:main": "tslib.es6.js", |
| | | "keywords": [ |
| | | "TypeScript", |
| | | "Microsoft", |
| | | "compiler", |
| | | "language", |
| | | "javascript", |
| | | "tslib", |
| | | "runtime" |
| | | ], |
| | | "license": "0BSD", |
| | | "main": "tslib.js", |
| | | "module": "tslib.es6.js", |
| | | "name": "tslib", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git+https://github.com/Microsoft/tslib.git" |
| | | }, |
| | | "sideEffects": false, |
| | | "typings": "tslib.d.ts", |
| | | "version": "1.14.1" |
| | | } |
New file |
| | |
| | | // When on node 14, it validates that all of the commonjs exports |
| | | // are correctly re-exported for es modules importers. |
| | | |
| | | const nodeMajor = Number(process.version.split(".")[0].slice(1)) |
| | | if (nodeMajor < 14) { |
| | | console.log("Skipping because node does not support module exports.") |
| | | process.exit(0) |
| | | } |
| | | |
| | | // ES Modules import via the ./modules folder |
| | | import * as esTSLib from "../../modules/index.js" |
| | | |
| | | // Force a commonjs resolve |
| | | import { createRequire } from "module"; |
| | | const commonJSTSLib = createRequire(import.meta.url)("../../tslib.js"); |
| | | |
| | | for (const key in commonJSTSLib) { |
| | | if (commonJSTSLib.hasOwnProperty(key)) { |
| | | if(!esTSLib[key]) throw new Error(`ESModules is missing ${key} - it needs to be re-exported in ./modules/index.js`) |
| | | } |
| | | } |
| | | |
| | | console.log("All exports in commonjs are available for es module consumers.") |
New file |
| | |
| | | { |
| | | "type": "module", |
| | | "scripts": { |
| | | "test": "node index.js" |
| | | } |
| | | } |
New file |
| | |
| | | /*! ***************************************************************************** |
| | | Copyright (c) Microsoft Corporation. |
| | | |
| | | Permission to use, copy, modify, and/or distribute this software for any |
| | | purpose with or without fee is hereby granted. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| | | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| | | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| | | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| | | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| | | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| | | PERFORMANCE OF THIS SOFTWARE. |
| | | ***************************************************************************** */ |
| | | export declare function __extends(d: Function, b: Function): void; |
| | | export declare function __assign(t: any, ...sources: any[]): any; |
| | | export declare function __rest(t: any, propertyNames: (string | symbol)[]): any; |
| | | export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any; |
| | | export declare function __param(paramIndex: number, decorator: Function): Function; |
| | | export declare function __metadata(metadataKey: any, metadataValue: any): Function; |
| | | export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; |
| | | export declare function __generator(thisArg: any, body: Function): any; |
| | | export declare function __exportStar(m: any, exports: any): void; |
| | | export declare function __values(o: any): any; |
| | | export declare function __read(o: any, n?: number): any[]; |
| | | export declare function __spread(...args: any[][]): any[]; |
| | | export declare function __spreadArrays(...args: any[][]): any[]; |
| | | export declare function __await(v: any): any; |
| | | export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any; |
| | | export declare function __asyncDelegator(o: any): any; |
| | | export declare function __asyncValues(o: any): any; |
| | | export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray; |
| | | export declare function __importStar<T>(mod: T): T; |
| | | export declare function __importDefault<T>(mod: T): T | { default: T }; |
| | | export declare function __classPrivateFieldGet<T extends object, V>(receiver: T, privateMap: { has(o: T): boolean, get(o: T): V | undefined }): V; |
| | | export declare function __classPrivateFieldSet<T extends object, V>(receiver: T, privateMap: { has(o: T): boolean, set(o: T, value: V): any }, value: V): V; |
| | | export declare function __createBinding(object: object, target: object, key: PropertyKey, objectKey?: PropertyKey): void; |
New file |
| | |
| | | <script src="tslib.es6.js"></script> |
New file |
| | |
| | | /*! ***************************************************************************** |
| | | Copyright (c) Microsoft Corporation. |
| | | |
| | | Permission to use, copy, modify, and/or distribute this software for any |
| | | purpose with or without fee is hereby granted. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| | | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| | | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| | | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| | | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| | | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| | | PERFORMANCE OF THIS SOFTWARE. |
| | | ***************************************************************************** */ |
| | | /* global Reflect, Promise */ |
| | | |
| | | var extendStatics = function(d, b) { |
| | | extendStatics = Object.setPrototypeOf || |
| | | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || |
| | | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; |
| | | return extendStatics(d, b); |
| | | }; |
| | | |
| | | export function __extends(d, b) { |
| | | extendStatics(d, b); |
| | | function __() { this.constructor = d; } |
| | | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |
| | | } |
| | | |
| | | export var __assign = function() { |
| | | __assign = Object.assign || function __assign(t) { |
| | | for (var s, i = 1, n = arguments.length; i < n; i++) { |
| | | s = arguments[i]; |
| | | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; |
| | | } |
| | | return t; |
| | | } |
| | | return __assign.apply(this, arguments); |
| | | } |
| | | |
| | | export function __rest(s, e) { |
| | | var t = {}; |
| | | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) |
| | | t[p] = s[p]; |
| | | if (s != null && typeof Object.getOwnPropertySymbols === "function") |
| | | for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { |
| | | if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) |
| | | t[p[i]] = s[p[i]]; |
| | | } |
| | | return t; |
| | | } |
| | | |
| | | export function __decorate(decorators, target, key, desc) { |
| | | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; |
| | | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); |
| | | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; |
| | | return c > 3 && r && Object.defineProperty(target, key, r), r; |
| | | } |
| | | |
| | | export function __param(paramIndex, decorator) { |
| | | return function (target, key) { decorator(target, key, paramIndex); } |
| | | } |
| | | |
| | | export function __metadata(metadataKey, metadataValue) { |
| | | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); |
| | | } |
| | | |
| | | export function __awaiter(thisArg, _arguments, P, generator) { |
| | | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |
| | | return new (P || (P = Promise))(function (resolve, reject) { |
| | | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |
| | | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |
| | | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |
| | | step((generator = generator.apply(thisArg, _arguments || [])).next()); |
| | | }); |
| | | } |
| | | |
| | | export function __generator(thisArg, body) { |
| | | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; |
| | | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; |
| | | function verb(n) { return function (v) { return step([n, v]); }; } |
| | | function step(op) { |
| | | if (f) throw new TypeError("Generator is already executing."); |
| | | while (_) try { |
| | | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; |
| | | if (y = 0, t) op = [op[0] & 2, t.value]; |
| | | switch (op[0]) { |
| | | case 0: case 1: t = op; break; |
| | | case 4: _.label++; return { value: op[1], done: false }; |
| | | case 5: _.label++; y = op[1]; op = [0]; continue; |
| | | case 7: op = _.ops.pop(); _.trys.pop(); continue; |
| | | default: |
| | | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } |
| | | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } |
| | | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } |
| | | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } |
| | | if (t[2]) _.ops.pop(); |
| | | _.trys.pop(); continue; |
| | | } |
| | | op = body.call(thisArg, _); |
| | | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } |
| | | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; |
| | | } |
| | | } |
| | | |
| | | export function __createBinding(o, m, k, k2) { |
| | | if (k2 === undefined) k2 = k; |
| | | o[k2] = m[k]; |
| | | } |
| | | |
| | | export function __exportStar(m, exports) { |
| | | for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; |
| | | } |
| | | |
| | | export function __values(o) { |
| | | var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; |
| | | if (m) return m.call(o); |
| | | if (o && typeof o.length === "number") return { |
| | | next: function () { |
| | | if (o && i >= o.length) o = void 0; |
| | | return { value: o && o[i++], done: !o }; |
| | | } |
| | | }; |
| | | throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); |
| | | } |
| | | |
| | | export function __read(o, n) { |
| | | var m = typeof Symbol === "function" && o[Symbol.iterator]; |
| | | if (!m) return o; |
| | | var i = m.call(o), r, ar = [], e; |
| | | try { |
| | | while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); |
| | | } |
| | | catch (error) { e = { error: error }; } |
| | | finally { |
| | | try { |
| | | if (r && !r.done && (m = i["return"])) m.call(i); |
| | | } |
| | | finally { if (e) throw e.error; } |
| | | } |
| | | return ar; |
| | | } |
| | | |
| | | export function __spread() { |
| | | for (var ar = [], i = 0; i < arguments.length; i++) |
| | | ar = ar.concat(__read(arguments[i])); |
| | | return ar; |
| | | } |
| | | |
| | | export function __spreadArrays() { |
| | | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; |
| | | for (var r = Array(s), k = 0, i = 0; i < il; i++) |
| | | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) |
| | | r[k] = a[j]; |
| | | return r; |
| | | }; |
| | | |
| | | export function __await(v) { |
| | | return this instanceof __await ? (this.v = v, this) : new __await(v); |
| | | } |
| | | |
| | | export function __asyncGenerator(thisArg, _arguments, generator) { |
| | | if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); |
| | | var g = generator.apply(thisArg, _arguments || []), i, q = []; |
| | | return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; |
| | | function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } |
| | | function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } |
| | | function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } |
| | | function fulfill(value) { resume("next", value); } |
| | | function reject(value) { resume("throw", value); } |
| | | function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } |
| | | } |
| | | |
| | | export function __asyncDelegator(o) { |
| | | var i, p; |
| | | return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; |
| | | function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } |
| | | } |
| | | |
| | | export function __asyncValues(o) { |
| | | if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); |
| | | var m = o[Symbol.asyncIterator], i; |
| | | return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); |
| | | function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } |
| | | function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } |
| | | } |
| | | |
| | | export function __makeTemplateObject(cooked, raw) { |
| | | if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } |
| | | return cooked; |
| | | }; |
| | | |
| | | export function __importStar(mod) { |
| | | if (mod && mod.__esModule) return mod; |
| | | var result = {}; |
| | | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |
| | | result.default = mod; |
| | | return result; |
| | | } |
| | | |
| | | export function __importDefault(mod) { |
| | | return (mod && mod.__esModule) ? mod : { default: mod }; |
| | | } |
| | | |
| | | export function __classPrivateFieldGet(receiver, privateMap) { |
| | | if (!privateMap.has(receiver)) { |
| | | throw new TypeError("attempted to get private field on non-instance"); |
| | | } |
| | | return privateMap.get(receiver); |
| | | } |
| | | |
| | | export function __classPrivateFieldSet(receiver, privateMap, value) { |
| | | if (!privateMap.has(receiver)) { |
| | | throw new TypeError("attempted to set private field on non-instance"); |
| | | } |
| | | privateMap.set(receiver, value); |
| | | return value; |
| | | } |
New file |
| | |
| | | <script src="tslib.js"></script> |
New file |
| | |
| | | /*! ***************************************************************************** |
| | | Copyright (c) Microsoft Corporation. |
| | | |
| | | Permission to use, copy, modify, and/or distribute this software for any |
| | | purpose with or without fee is hereby granted. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| | | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| | | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| | | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| | | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| | | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| | | PERFORMANCE OF THIS SOFTWARE. |
| | | ***************************************************************************** */ |
| | | |
| | | /* global global, define, System, Reflect, Promise */ |
| | | var __extends; |
| | | var __assign; |
| | | var __rest; |
| | | var __decorate; |
| | | var __param; |
| | | var __metadata; |
| | | var __awaiter; |
| | | var __generator; |
| | | var __exportStar; |
| | | var __values; |
| | | var __read; |
| | | var __spread; |
| | | var __spreadArrays; |
| | | var __await; |
| | | var __asyncGenerator; |
| | | var __asyncDelegator; |
| | | var __asyncValues; |
| | | var __makeTemplateObject; |
| | | var __importStar; |
| | | var __importDefault; |
| | | var __classPrivateFieldGet; |
| | | var __classPrivateFieldSet; |
| | | var __createBinding; |
| | | (function (factory) { |
| | | var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; |
| | | if (typeof define === "function" && define.amd) { |
| | | define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); |
| | | } |
| | | else if (typeof module === "object" && typeof module.exports === "object") { |
| | | factory(createExporter(root, createExporter(module.exports))); |
| | | } |
| | | else { |
| | | factory(createExporter(root)); |
| | | } |
| | | function createExporter(exports, previous) { |
| | | if (exports !== root) { |
| | | if (typeof Object.create === "function") { |
| | | Object.defineProperty(exports, "__esModule", { value: true }); |
| | | } |
| | | else { |
| | | exports.__esModule = true; |
| | | } |
| | | } |
| | | return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; |
| | | } |
| | | }) |
| | | (function (exporter) { |
| | | var extendStatics = Object.setPrototypeOf || |
| | | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || |
| | | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; |
| | | |
| | | __extends = function (d, b) { |
| | | extendStatics(d, b); |
| | | function __() { this.constructor = d; } |
| | | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |
| | | }; |
| | | |
| | | __assign = Object.assign || function (t) { |
| | | for (var s, i = 1, n = arguments.length; i < n; i++) { |
| | | s = arguments[i]; |
| | | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; |
| | | } |
| | | return t; |
| | | }; |
| | | |
| | | __rest = function (s, e) { |
| | | var t = {}; |
| | | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) |
| | | t[p] = s[p]; |
| | | if (s != null && typeof Object.getOwnPropertySymbols === "function") |
| | | for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { |
| | | if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) |
| | | t[p[i]] = s[p[i]]; |
| | | } |
| | | return t; |
| | | }; |
| | | |
| | | __decorate = function (decorators, target, key, desc) { |
| | | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; |
| | | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); |
| | | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; |
| | | return c > 3 && r && Object.defineProperty(target, key, r), r; |
| | | }; |
| | | |
| | | __param = function (paramIndex, decorator) { |
| | | return function (target, key) { decorator(target, key, paramIndex); } |
| | | }; |
| | | |
| | | __metadata = function (metadataKey, metadataValue) { |
| | | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); |
| | | }; |
| | | |
| | | __awaiter = function (thisArg, _arguments, P, generator) { |
| | | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |
| | | return new (P || (P = Promise))(function (resolve, reject) { |
| | | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |
| | | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |
| | | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |
| | | step((generator = generator.apply(thisArg, _arguments || [])).next()); |
| | | }); |
| | | }; |
| | | |
| | | __generator = function (thisArg, body) { |
| | | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; |
| | | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; |
| | | function verb(n) { return function (v) { return step([n, v]); }; } |
| | | function step(op) { |
| | | if (f) throw new TypeError("Generator is already executing."); |
| | | while (_) try { |
| | | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; |
| | | if (y = 0, t) op = [op[0] & 2, t.value]; |
| | | switch (op[0]) { |
| | | case 0: case 1: t = op; break; |
| | | case 4: _.label++; return { value: op[1], done: false }; |
| | | case 5: _.label++; y = op[1]; op = [0]; continue; |
| | | case 7: op = _.ops.pop(); _.trys.pop(); continue; |
| | | default: |
| | | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } |
| | | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } |
| | | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } |
| | | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } |
| | | if (t[2]) _.ops.pop(); |
| | | _.trys.pop(); continue; |
| | | } |
| | | op = body.call(thisArg, _); |
| | | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } |
| | | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; |
| | | } |
| | | }; |
| | | |
| | | __createBinding = function(o, m, k, k2) { |
| | | if (k2 === undefined) k2 = k; |
| | | o[k2] = m[k]; |
| | | }; |
| | | |
| | | __exportStar = function (m, exports) { |
| | | for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; |
| | | }; |
| | | |
| | | __values = function (o) { |
| | | var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; |
| | | if (m) return m.call(o); |
| | | if (o && typeof o.length === "number") return { |
| | | next: function () { |
| | | if (o && i >= o.length) o = void 0; |
| | | return { value: o && o[i++], done: !o }; |
| | | } |
| | | }; |
| | | throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); |
| | | }; |
| | | |
| | | __read = function (o, n) { |
| | | var m = typeof Symbol === "function" && o[Symbol.iterator]; |
| | | if (!m) return o; |
| | | var i = m.call(o), r, ar = [], e; |
| | | try { |
| | | while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); |
| | | } |
| | | catch (error) { e = { error: error }; } |
| | | finally { |
| | | try { |
| | | if (r && !r.done && (m = i["return"])) m.call(i); |
| | | } |
| | | finally { if (e) throw e.error; } |
| | | } |
| | | return ar; |
| | | }; |
| | | |
| | | __spread = function () { |
| | | for (var ar = [], i = 0; i < arguments.length; i++) |
| | | ar = ar.concat(__read(arguments[i])); |
| | | return ar; |
| | | }; |
| | | |
| | | __spreadArrays = function () { |
| | | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; |
| | | for (var r = Array(s), k = 0, i = 0; i < il; i++) |
| | | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) |
| | | r[k] = a[j]; |
| | | return r; |
| | | }; |
| | | |
| | | __await = function (v) { |
| | | return this instanceof __await ? (this.v = v, this) : new __await(v); |
| | | }; |
| | | |
| | | __asyncGenerator = function (thisArg, _arguments, generator) { |
| | | if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); |
| | | var g = generator.apply(thisArg, _arguments || []), i, q = []; |
| | | return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; |
| | | function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } |
| | | function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } |
| | | function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } |
| | | function fulfill(value) { resume("next", value); } |
| | | function reject(value) { resume("throw", value); } |
| | | function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } |
| | | }; |
| | | |
| | | __asyncDelegator = function (o) { |
| | | var i, p; |
| | | return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; |
| | | function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } |
| | | }; |
| | | |
| | | __asyncValues = function (o) { |
| | | if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); |
| | | var m = o[Symbol.asyncIterator], i; |
| | | return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); |
| | | function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } |
| | | function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } |
| | | }; |
| | | |
| | | __makeTemplateObject = function (cooked, raw) { |
| | | if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } |
| | | return cooked; |
| | | }; |
| | | |
| | | __importStar = function (mod) { |
| | | if (mod && mod.__esModule) return mod; |
| | | var result = {}; |
| | | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |
| | | result["default"] = mod; |
| | | return result; |
| | | }; |
| | | |
| | | __importDefault = function (mod) { |
| | | return (mod && mod.__esModule) ? mod : { "default": mod }; |
| | | }; |
| | | |
| | | __classPrivateFieldGet = function (receiver, privateMap) { |
| | | if (!privateMap.has(receiver)) { |
| | | throw new TypeError("attempted to get private field on non-instance"); |
| | | } |
| | | return privateMap.get(receiver); |
| | | }; |
| | | |
| | | __classPrivateFieldSet = function (receiver, privateMap, value) { |
| | | if (!privateMap.has(receiver)) { |
| | | throw new TypeError("attempted to set private field on non-instance"); |
| | | } |
| | | privateMap.set(receiver, value); |
| | | return value; |
| | | }; |
| | | |
| | | exporter("__extends", __extends); |
| | | exporter("__assign", __assign); |
| | | exporter("__rest", __rest); |
| | | exporter("__decorate", __decorate); |
| | | exporter("__param", __param); |
| | | exporter("__metadata", __metadata); |
| | | exporter("__awaiter", __awaiter); |
| | | exporter("__generator", __generator); |
| | | exporter("__exportStar", __exportStar); |
| | | exporter("__createBinding", __createBinding); |
| | | exporter("__values", __values); |
| | | exporter("__read", __read); |
| | | exporter("__spread", __spread); |
| | | exporter("__spreadArrays", __spreadArrays); |
| | | exporter("__await", __await); |
| | | exporter("__asyncGenerator", __asyncGenerator); |
| | | exporter("__asyncDelegator", __asyncDelegator); |
| | | exporter("__asyncValues", __asyncValues); |
| | | exporter("__makeTemplateObject", __makeTemplateObject); |
| | | exporter("__importStar", __importStar); |
| | | exporter("__importDefault", __importDefault); |
| | | exporter("__classPrivateFieldGet", __classPrivateFieldGet); |
| | | exporter("__classPrivateFieldSet", __classPrivateFieldSet); |
| | | }); |
| | |
| | | "regenerator-runtime": "^0.13.4" |
| | | } |
| | | }, |
| | | "domelementtype": { |
| | | "version": "1.3.1", |
| | | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", |
| | | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" |
| | | }, |
| | | "domhandler": { |
| | | "version": "2.4.2", |
| | | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", |
| | | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", |
| | | "requires": { |
| | | "domelementtype": "1" |
| | | } |
| | | }, |
| | | "entities": { |
| | | "version": "1.1.2", |
| | | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", |
| | | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" |
| | | }, |
| | | "events": { |
| | | "version": "3.2.0", |
| | | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", |
| | | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" |
| | | }, |
| | | "mini-ali-ui": { |
| | | "version": "1.2.1", |
| | | "resolved": "https://registry.npm.taobao.org/mini-ali-ui/download/mini-ali-ui-1.2.1.tgz", |
| | |
| | | "@babel/runtime": "^7.11.2" |
| | | } |
| | | }, |
| | | "mini-html-parser2": { |
| | | "version": "0.2.0", |
| | | "resolved": "https://registry.npmjs.org/mini-html-parser2/-/mini-html-parser2-0.2.0.tgz", |
| | | "integrity": "sha512-SvDQmbQorG8LANarEnsuJBSrMwhHuXb4PK0oDix5ThqA5xNtgQjswxeJTqfP6+JEyQ5195Qlcpexej5zjSmLjA==", |
| | | "requires": { |
| | | "domhandler": "^2.4.2", |
| | | "entities": "^1.1.1", |
| | | "events": "^3.0.0" |
| | | } |
| | | }, |
| | | "miniapp-bc-user": { |
| | | "version": "0.0.4", |
| | | "resolved": "https://registry.npmjs.org/miniapp-bc-user/-/miniapp-bc-user-0.0.4.tgz", |
| | | "integrity": "sha512-BitiMSKR/Z+GnXiz/rZKUbLVoQ0pjlN0DSW96Rh1gaNJ/nPltCdWxQ+Vg1Y6GR8VTC3cnHcsHy1jpehxsmPAtg==", |
| | | "requires": { |
| | | "tslib": "^1.11.1" |
| | | } |
| | | }, |
| | | "regenerator-runtime": { |
| | | "version": "0.13.7", |
| | | "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz", |
| | | "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=" |
| | | }, |
| | | "tslib": { |
| | | "version": "1.14.1", |
| | | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", |
| | | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | "dependencies": { |
| | | "mini-ali-ui": "^1.2.1" |
| | | "mini-ali-ui": "^1.2.1", |
| | | "mini-html-parser2": "^0.2.0", |
| | | "miniapp-bc-user": "0.0.4" |
| | | } |
| | | } |
| | |
| | | position: relative; |
| | | } |
| | | |
| | | .content .award .award-item { |
| | | display: flex; |
| | | margin-bottom: 23rpx; |
| | | } |
| | | |
| | | .content .award .award-item rich-text { |
| | | width: 592rpx; |
| | | margin-left: 17rpx; |
| | | } |
| | | |
| | | .content .award image { |
| | | width: 28rpx; |
| | | height: 28rpx; |
| | | margin-top: 5rpx; |
| | | } |
| | | |
| | | .content .award .question { |
| | |
| | | margin-bottom: 19rpx; |
| | | } |
| | | |
| | | .content .award-anouncement rich-text { |
| | | font-size: 24rpx; |
| | | color: #999999; |
| | | font-weight: 400; |
| | | } |
| | | |
| | | .content .sponsor-join { |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | margin-bottom: 19rpx; |
| | | } |
| | | |
| | | .content .sponsor-join rich-text { |
| | | font-size: 24rpx; |
| | | color: #999999; |
| | | font-weight: 400; |
| | | } |
| | | |
| | | .footer { |
| | | display: flex; |
| | | justify-content: space-around; |
| | |
| | | </view> |
| | | <view class="content"> |
| | | <view class="award item"> |
| | | <view style="display:flex;"> |
| | | <view style="display:flex;margin-bottom:23rpx;"> |
| | | <view a:for="{{activity.labels}}" style="color:{{item.color}}; background:{{item.background}}; " class="label"> |
| | | {{item.value}} |
| | | </view> |
| | | </view> |
| | | <view class="award-item" a:for="{{activity.awardList}}" onTap="onAwardDetailClick"> |
| | | <image mode="scaleToFill" src=""/> |
| | | <rich-text class="title" nodes="{{}}"></rich-text> |
| | | <view class="award-item" a:for-item="award" a:for="{{activity.awardList}}" onTap="onAwardDetailClick"> |
| | | <image mode="scaleToFill" src="/image/icon/icon_award_ding.png"/> |
| | | <rich-text class="title" nodes="{{award.htmlJson}}"></rich-text> |
| | | </view> |
| | | <view class="load-more" a:if="{{awardShowMore}}" data-type="award" onTap="showMore"> |
| | | 查看更多 |
| | |
| | | <view class="assist-process item" onTap="onAssistProcessClick"> |
| | | <view style="flex-grow:1;"> |
| | | <view class="title">助力进度</view> |
| | | <rich-text nodes="{{}}"> |
| | | <rich-text nodes="{{assistProcessDesc}}"> |
| | | </rich-text> |
| | | </view> |
| | | <image mode="scaleToFill" src="/image/icon/icon_right_array_input.png" class="input"/> |
| | |
| | | <view class="award-anouncement item" onTap="onDrawnAnouncementClick"> |
| | | <view style="flex-grow:1;"> |
| | | <view class="title">中奖公示</view> |
| | | <rich-text nodes="{{}}"> |
| | | <rich-text nodes="{{drawnAnouncementDesc}}"> |
| | | </rich-text> |
| | | </view> |
| | | <image mode="scaleToFill" src="/image/icon/icon_right_array_input.png" class="input"/> |
| | |
| | | <view class="sponsor-join item" onTap="onSponsorSignUpClick"> |
| | | <view style="flex-grow:1;"> |
| | | <view class="title">赞助报名</view> |
| | | <rich-text nodes="{{}}"> |
| | | <rich-text nodes="{{[{name:'div',children:[{type:'text',text:'成为赞助商为用户派送福利'}]}]}}"> |
| | | </rich-text> |
| | | </view> |
| | | <image mode="scaleToFill" src="/image/icon/icon_right_array_input.png" class="input"/> |
| | |
| | | var help = require('../../util/help.js'); |
| | | import parse from 'mini-html-parser2'; |
| | | Page({ |
| | | data: { |
| | | leftTime: {//剩余时间 |
| | |
| | | showAssistModal: true, |
| | | //奖项查看更多 |
| | | awardShowMore: true, |
| | | |
| | | |
| | | //参与条件查看更多 |
| | | joinShowMore: true, |
| | | |
| | |
| | | //奖品列表最大数量 |
| | | maxAward: 3, |
| | | |
| | | activity: { |
| | | joined: false, |
| | | awardList: [{}, {}, {}], |
| | | labels: [{ background: "#E0FFD2", color: "#008B10", value: "进行中" }, { background: "#FFF5D2", color: "#FF8A00", value: "押金预付" }, { background: "#FFE2E6", color: "#F53D59", value: "礼金核实" }] |
| | | } |
| | | //助力进度 |
| | | assistProcessDesc: [], |
| | | //中奖公示 |
| | | drawnAnouncementDesc: [], |
| | | |
| | | }, |
| | | |
| | | onShareAppMessage() { |
| | | return { |
| | | title: '分享 View 组件', |
| | | desc: 'View 组件很通用', |
| | | path: 'pages/activity-detail/activity-detail', |
| | | }; |
| | | }, |
| | | onLoad() { |
| | | help.setPageNavBar("抽奖详情"); |
| | | var that=this; |
| | | |
| | | var activity = { |
| | | joined: false, |
| | | awardList: [{ |
| | | |
| | | }, {}, {}], |
| | | labels: [{ background: "#E0FFD2", color: "#008B10", value: "进行中" }, { background: "#FFF5D2", color: "#FF8A00", value: "押金预付" }, { background: "#FFE2E6", color: "#F53D59", value: "礼金核实" }] |
| | | }; |
| | | |
| | | |
| | | //封装奖项的富文本 |
| | | this.loadRichTextNode(help.getAwardHtml({}), function (nodes) { |
| | | for (var i = 0; i < activity.awardList.length; i++) { |
| | | activity.awardList[i].htmlJson = nodes; |
| | | } |
| | | that.setData({ |
| | | activity: activity |
| | | }); |
| | | }); |
| | | //封装助力进度的富文本 |
| | | this.loadRichTextNode(help.getAssistProcessHtml(1), function (nodes) { |
| | | |
| | | that.setData({ |
| | | assistProcessDesc: nodes |
| | | }); |
| | | }); |
| | | |
| | | //封装中奖公示的富文本 |
| | | this.loadRichTextNode(help.getDowanAnouncementHtml("2020.02.02 02:02"), function (nodes) { |
| | | |
| | | that.setData({ |
| | | drawnAnouncementDesc: nodes |
| | | }); |
| | | }); |
| | | |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | loadRichTextNode(html, callback) { |
| | | parse(html, (err, nodes) => { |
| | | console.log(nodes); |
| | | if (!err) { |
| | | callback(nodes); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | onReady() { |
| | | |
| | | var item = my.createSelectorQuery() |
| | |
| | | }, |
| | | //更多参与者 |
| | | onJoinerMoreClick() { |
| | | my.navigateTo({ |
| | | my.navigateTo({ |
| | | url: '/pages/join-statistic/join-statistic' |
| | | }); |
| | | }, |
| | |
| | | |
| | | //中奖公示 |
| | | onDrawnAnouncementClick() { |
| | | my.navigateTo({ |
| | | my.navigateTo({ |
| | | url: '/pages/reward-announcement/reward-announcement' |
| | | }); |
| | | }, |
| | | |
| | | //赞助商报名 |
| | | onSponsorSignUpClick() { |
| | | my.showToast({ |
| | | content: '赞助报名' |
| | | my.navigateTo({ |
| | | url: '/pages/sponsor-signup/sponsor-signup' |
| | | }); |
| | | }, |
| | | |
| | | //意见反馈 |
| | | onAdviceClick() { |
| | | my.navigateTo({ |
| | | my.navigateTo({ |
| | | url: '/pages/advice/advice' |
| | | }); |
| | | }, |
| | |
| | | <view> |
| | | New Page goods |
| | | <view class="page"> |
| | | <!-- <bc-module a:if="{{ showComponent }}" code="suite://bc.suite.choiceness/bc.template.choiceness" name="block-choiceness" onError="bcError" ext="{{pluginOptions: {pageSize:20,relationId:'123123'}}}" /> --> |
| | | <bc-module a:if="{{ showComponent }}" code="suite://bc.suite.etaoMarketing/bc.template.rebate.search" name="block-etao-searchbox" onError="bcError" /> |
| | | </view> |
| | |
| | | import { loadBC } from 'miniapp-bc-user' |
| | | Page({ |
| | | data: {}, |
| | | onLoad() {}, |
| | | onLoad() { }, |
| | | async onReady() { |
| | | try { |
| | | await loadBC(); |
| | | this.setData({ showComponent: true }) |
| | | } catch (e) { |
| | | console.log(e); |
| | | } |
| | | }, |
| | | bcError(err) { |
| | | console.log('err:', err) |
| | | }, |
| | | /*----以下是物料类插件有滚动加载需求的专用代码--其他对接请忽略--*/ |
| | | // 每日精选插件 |
| | | // 监听页面滚动到底部,加载更多 |
| | | onReachBottom() { |
| | | this.setData({ |
| | | loadMoreTime: (this.data.loadMoreTime || 0) + 1 |
| | | }) |
| | | }, |
| | | }); |
| | |
| | | {} |
| | | { |
| | | "usingComponents": { |
| | | "bc-module": "miniapp-bc-user/es/bc-module/bc-module" |
| | | } |
| | | } |
New file |
| | |
| | | var |
| | | |
| | | Page({ |
| | | data: {}, |
| | | onLoad() {}, |
| | | }); |
| | |
| | | position: relative; |
| | | color: white; |
| | | padding: 50rpx 30rpx; |
| | | ; |
| | | font-size: 0; |
| | | } |
| | | |
| | | .user .portrait { |
| | |
| | | border: #73B9FF solid 1px; |
| | | text-align: center; |
| | | font-weight: 400; |
| | | } |
| | | |
| | | .user .login { |
| | | color: white; |
| | | height: 42rpx; |
| | | border-radius: 21rpx; |
| | | font-size: 24rpx; |
| | | line-height: 42rpx; |
| | | background: #0080FF; |
| | | border-color: white; |
| | | border: #73B9FF solid 1px; |
| | | padding: 0 28rpx; |
| | | margin-left: 30rpx; |
| | | } |
| | | |
| | | .modal-logout {} |
| | |
| | | font-size: 30rpx; |
| | | } |
| | | |
| | | badge{ |
| | | badge { |
| | | z-index: 10; |
| | | } |
| | |
| | | <view enable-back-to-top="true"> |
| | | <flex class="user" align="center"> |
| | | <flex class="user" align="center" a:if="{{logined}}"> |
| | | <image mode="scaleToFill" class="portrait" src="/image/portrait-test.jpg"/> |
| | | <view style="width:480rpx;margin-right:10rpx;margin-left:31rpx;"> |
| | | <text class="nick-name" number-of-lines="1"> |
| | |
| | | ID:412165 |
| | | </text> |
| | | </view> |
| | | <view class="logout"> |
| | | <button type="ghost" class="logout"> |
| | | 退出 |
| | | </view> |
| | | </button> |
| | | </flex> |
| | | <flex a:else class="user" align="center" a:if="{{logined}}"> |
| | | <image mode="scaleToFill" class="portrait" src="/image/portrait-test.jpg"/> |
| | | <button type="ghost" class="login" open-type="getAuthorize" onGetAuthorize="onGetAuthorize" onError="onAuthError" scope='userInfo'> |
| | | 登录 |
| | | </button> |
| | | </flex> |
| | | <list> |
| | | <view style="height:22rpx;"></view> |
| | |
| | | data: { |
| | | showLogout: true |
| | | }, |
| | | |
| | | //导航栏点击过来的 |
| | | onTabItemTap(item) { |
| | | my.getAuthCode({ |
| | | scopes: ['auth_user'], |
| | | success: (res) => { |
| | | my.getOpenUserInfo({ |
| | | fail: (res) => { |
| | | }, |
| | | success: (res) => { |
| | | |
| | | console.log(res); |
| | | let userInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 response |
| | | console.log(userInfo); |
| | | } |
| | | }); |
| | | }, |
| | | }); |
| | | }, |
| | | onLoad() { |
| | | my.setNavigationBar({ |
| | | backgroundColor: "#0080FF", |
| | |
| | | }); |
| | | |
| | | }, |
| | | |
| | | onGetAuthorize(res) { |
| | | var that=this; |
| | | my.getOpenUserInfo({ |
| | | fail: (res) => { |
| | | }, |
| | | success: (res) => { |
| | | let userInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 response |
| | | console.log(JSON.stringify(userInfo)); |
| | | if (userInfo.code == '10000') {//成功 |
| | | my.showToast({ |
| | | content: JSON.stringify(userInfo) |
| | | }); |
| | | that.setData({ |
| | | logined: true |
| | | }); |
| | | } else { |
| | | my.showToast({ |
| | | content: '授权失败' |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | onAuthError(event) { |
| | | my.showToast({ |
| | | content: '授权失败' |
| | | }); |
| | | }, |
| | | |
| | | |
| | | onItemClick(event) { |
| | | |
| | | var key = help.getEventParam(event, "key"); |
| | |
| | | <view style="padding-top:20rpx;"> |
| | | <list > |
| | | <picker-item data-field="bank" placeholder="" value="{{bank}}" onPickerTap="onPickerTap"> |
| | | <form onSubmit="onSubmitClick"> |
| | | <list > |
| | | <picker-item placeholder="" value="{{data1}}" onPickerTap="onPickerTap1"> |
| | | 我是 |
| | | </picker-item> |
| | | <picker-item data-field="bank" placeholder="" value="{{bank}}" onPickerTap="onPickerTap"> |
| | | </picker-item> |
| | | <picker-item placeholder="" value="{{data2}}" onPickerTap="onPickerTap2"> |
| | | 我能提供 |
| | | </picker-item> |
| | | <list-item arrow="{{false}}" style="display:flex;line-height:0" upperSubtitle=""> |
| | | <text> 联系方式 |
| | | </text> |
| | | <input placeholder="请输入" style="text-align:left;" slot="afterTitle"/> |
| | | </list-item> |
| | | </list> |
| | | <button type="primary" onTap=""> |
| | | </picker-item> |
| | | <list-item arrow="{{false}}" style="display:flex;line-height:0" upperSubtitle=""> |
| | | <text> 联系方式 |
| | | </text> |
| | | <input name="phone" placeholder="请输入" value="{{phone}}" style="text-align:left;" slot="afterTitle"/> |
| | | </list-item> |
| | | </list> |
| | | <button type="primary" formType="submit"> |
| | | 提交信息 |
| | | </button> |
| | | </button> |
| | | </form> |
| | | </view> |
| | |
| | | var help = require("../../util/help.js") |
| | | const banks=[1,2,3,4]; |
| | | const source_1 = ["淘客", "测试1", "测试1", "测试1"]; |
| | | const source_2 = ["测试1", "测试2", "测试3", "测试4"]; |
| | | Page({ |
| | | data: {}, |
| | | data: { |
| | | data1: '', |
| | | data2: '' |
| | | }, |
| | | onLoad() { |
| | | help.setPageNavBar("赞助报名"); |
| | | }, |
| | | onPickerTap() { |
| | | onPickerTap1() { |
| | | my.showActionSheet({ |
| | | items: banks, |
| | | items: source_1, |
| | | success: (res) => { |
| | | this.setData({ |
| | | bank: banks[res.index], |
| | | data1: source_1[res.index], |
| | | }); |
| | | }, |
| | | }); |
| | | }, |
| | | onPickerTap2() { |
| | | my.showActionSheet({ |
| | | items: source_2, |
| | | success: (res) => { |
| | | console.log(res); |
| | | this.setData({ |
| | | data2: source_2[res.index], |
| | | }); |
| | | }, |
| | | }); |
| | | }, |
| | | //提交 |
| | | onSubmitClick(e) { |
| | | console.log(e.detail.value); |
| | | var phone = e.detail.value.phone; |
| | | if (help.isNullOrEmpty(this.data.data1) || help.isNullOrEmpty(this.data.data2) || help.isNullOrEmpty(phone)) { |
| | | my.showToast({ |
| | | content: '信息未填写完整' |
| | | }); |
| | | return; |
| | | } |
| | | } |
| | | }); |
| | |
| | | "usingComponents": { |
| | | "list": "mini-ali-ui/es/list/index", |
| | | "list-item": "mini-ali-ui/es/list/list-item/index", |
| | | "picker-item": "mini-ali-ui/es/picker-item/index" |
| | | "picker-item": "mini-ali-ui/es/picker-item/index" |
| | | } |
| | | } |
| | |
| | | getEventParam(event, name) { |
| | | return event.target.dataset[name]; |
| | | }, |
| | | setPageNavBar(title){ |
| | | my.setNavigationBar({ |
| | | setPageNavBar(title) { |
| | | my.setNavigationBar({ |
| | | title: title, |
| | | backgroundColor: getApp().themeColor, |
| | | borderBottomColor: getApp().themeColor |
| | | }); |
| | | }, |
| | | isNullOrEmpty(str) { |
| | | if (str == undefined || str == null || str.length == 0) |
| | | return true; |
| | | else |
| | | return false; |
| | | }, |
| | | //获取奖项的html代码 |
| | | getAwardHtml(params) { |
| | | params = { |
| | | type: 1, |
| | | content: "奖品二:大额现金红包100,免费抽奖拼手气免费抽奖拼手免费抽奖拼手气免费抽奖拼手免费抽奖拼手气免费抽奖拼手", |
| | | moreType: 'icon',//text,icon |
| | | link: '' |
| | | }; |
| | | |
| | | var html = "<div>"; |
| | | html += params.content; |
| | | |
| | | if (params.link != null && params.link.length > 0) { |
| | | if (params.moreType == 'icon') { |
| | | html += "<img src='/image/icon/icon_right_array_fill.png' style='width:30rpx;height:30rpx;margin-bottom:-5rpx;margin-left:10rpx;'>"; |
| | | } else { |
| | | html += "<a href='http://www.baidu.com' style='color:#0080FF; font-size:24rpx;margin-left:10rpx;'>查看详情</a>"; |
| | | } |
| | | } |
| | | html += "</div>"; |
| | | console.log(html); |
| | | return html; |
| | | }, |
| | | |
| | | //获取助力进度html |
| | | getAssistProcessHtml(number) { |
| | | if (number == null || number == 0) { |
| | | return "<div>暂未邀请好友助力</div>"; |
| | | } |
| | | return "<div>已有<span style='color:#FF0000;'>" + number + "</span>位好友完成了助力</div>"; |
| | | }, |
| | | |
| | | getDowanAnouncementHtml(openTime) { |
| | | |
| | | if (help.isNullOrEmpty(openTime)) { |
| | | return "<div>暂未开奖</div>"; |
| | | } |
| | | return "<div>已于<span style='color:#FF0000;'>" + openTime + "</span>完成了开奖</div>"; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | }; |
| | | |
| | | module.exports = help; |
New file |
| | |
| | | var md5 = require("./md5.js"); |
| | | const SECRET = "123123123"; |
| | | var http = { |
| | | //网络请求 |
| | | postApi(url, params, success, fail, complete, showLoading) { |
| | | if (params == null) { |
| | | params = {}; |
| | | } |
| | | //判断token是否存在,如果不存在就去获取 |
| | | |
| | | http.getToken(function (token) { |
| | | |
| | | params.sign = http.getSign(params); |
| | | if (showLoading) { |
| | | my.showLoading(); |
| | | } |
| | | |
| | | my.request({ |
| | | url: url, |
| | | method: 'POST', |
| | | data: params, |
| | | headers: { |
| | | 'content-type': 'application/json', //默认值 |
| | | 'token': token |
| | | }, |
| | | dataType: 'json', |
| | | success: function (res) { |
| | | success(res); |
| | | if (res.code == 10001) {//token过期,刷新token |
| | | //删除token |
| | | |
| | | //重新请求 |
| | | http.postApi(url, params, success, fail, complete, showLoading); |
| | | } |
| | | }, |
| | | fail: function (res) { |
| | | fail(res); |
| | | }, |
| | | complete: function (res) { |
| | | my.hideLoading(); |
| | | complete(res); |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | |
| | | |
| | | |
| | | }, |
| | | getToken(success) { |
| | | //本地获取token |
| | | |
| | | var token; |
| | | let res = my.getStorageSync({ key: 'token' }); |
| | | if (res != null) { |
| | | token = res.data; |
| | | } |
| | | |
| | | if (token != null && token.length > 0) { |
| | | success(token); |
| | | } |
| | | |
| | | |
| | | my.getAuthCode({ |
| | | scopes: ['auth_base'], |
| | | success: (res) => { |
| | | //授权码 |
| | | const authCode = res.authCode; |
| | | //todo请求token |
| | | success("token"); |
| | | token = "token"; |
| | | //将token保存到本地 |
| | | my.setStorageSync({ |
| | | key: 'token', |
| | | data: token |
| | | }); |
| | | }, |
| | | }); |
| | | }, |
| | | getSign(params) { |
| | | if (params == null) |
| | | params = {}; |
| | | params.timestamp = new Date().getMilliseconds(); |
| | | params.appKey = getApp().appKey; |
| | | |
| | | var array = new Array(); |
| | | for (k, v in params) { |
| | | array.push(k + "=" + v); |
| | | } |
| | | |
| | | //排序 |
| | | array = array.sort(); |
| | | var str = ""; |
| | | for (var i = 0; i < array.length; i++) { |
| | | str += array[i] + "&"; |
| | | } |
| | | |
| | | if (str.endsWith("&")) { |
| | | str = str.substr(0, str.length - 1); |
| | | } |
| | | |
| | | str += SECRET; |
| | | return md5.md5(str); |
| | | } |
| | | }; |
| | | |
| | | module.exports = http; |
New file |
| | |
| | | function md5(string) { |
| | | var x = Array(); |
| | | var k, AA, BB, CC, DD, a, b, c, d; |
| | | var S11 = 7, S12 = 12, S13 = 17, S14 = 22; |
| | | var S21 = 5, S22 = 9, S23 = 14, S24 = 20; |
| | | var S31 = 4, S32 = 11, S33 = 16, S34 = 23; |
| | | var S41 = 6, S42 = 10, S43 = 15, S44 = 21; |
| | | string = Utf8Encode(string); |
| | | x = ConvertToWordArray(string); |
| | | a = 0x67452301; |
| | | b = 0xEFCDAB89; |
| | | c = 0x98BADCFE; |
| | | d = 0x10325476; |
| | | for (k = 0; k < x.length; k += 16) { |
| | | AA = a; |
| | | BB = b; |
| | | CC = c; |
| | | DD = d; |
| | | a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); |
| | | d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); |
| | | c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); |
| | | b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); |
| | | a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); |
| | | d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); |
| | | c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); |
| | | b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); |
| | | a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); |
| | | d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); |
| | | c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); |
| | | b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); |
| | | a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); |
| | | d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); |
| | | c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); |
| | | b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); |
| | | a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); |
| | | d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); |
| | | c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); |
| | | b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); |
| | | a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); |
| | | d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); |
| | | c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); |
| | | b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); |
| | | a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); |
| | | d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); |
| | | c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); |
| | | b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); |
| | | a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); |
| | | d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); |
| | | c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); |
| | | b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); |
| | | a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); |
| | | d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); |
| | | c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); |
| | | b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); |
| | | a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); |
| | | d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); |
| | | c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); |
| | | b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); |
| | | a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); |
| | | d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); |
| | | c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); |
| | | b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); |
| | | a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); |
| | | d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); |
| | | c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); |
| | | b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); |
| | | a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); |
| | | d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); |
| | | c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); |
| | | b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); |
| | | a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); |
| | | d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); |
| | | c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); |
| | | b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); |
| | | a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); |
| | | d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); |
| | | c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); |
| | | b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); |
| | | a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); |
| | | d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); |
| | | c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); |
| | | b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); |
| | | a = AddUnsigned(a, AA); |
| | | b = AddUnsigned(b, BB); |
| | | c = AddUnsigned(c, CC); |
| | | d = AddUnsigned(d, DD); |
| | | } |
| | | var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); |
| | | return temp.toUpperCase(); |
| | | } |
| | | function RotateLeft(lValue, iShiftBits) { |
| | | return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); |
| | | } |
| | | function AddUnsigned(lX, lY) { |
| | | var lX4, lY4, lX8, lY8, lResult; |
| | | lX8 = (lX & 0x80000000); |
| | | lY8 = (lY & 0x80000000); |
| | | lX4 = (lX & 0x40000000); |
| | | lY4 = (lY & 0x40000000); |
| | | lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); |
| | | if (lX4 & lY4) { |
| | | return (lResult ^ 0x80000000 ^ lX8 ^ lY8); |
| | | } |
| | | if (lX4 | lY4) { |
| | | if (lResult & 0x40000000) { |
| | | return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); |
| | | } else { |
| | | return (lResult ^ 0x40000000 ^ lX8 ^ lY8); |
| | | } |
| | | } else { |
| | | return (lResult ^ lX8 ^ lY8); |
| | | } |
| | | } |
| | | function F(x, y, z) { |
| | | return (x & y) | ((~x) & z); |
| | | } |
| | | function G(x, y, z) { |
| | | return (x & z) | (y & (~z)); |
| | | } |
| | | function H(x, y, z) { |
| | | return (x ^ y ^ z); |
| | | } |
| | | function I(x, y, z) { |
| | | return (y ^ (x | (~z))); |
| | | } |
| | | function FF(a, b, c, d, x, s, ac) { |
| | | a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); |
| | | return AddUnsigned(RotateLeft(a, s), b); |
| | | } |
| | | function GG(a, b, c, d, x, s, ac) { |
| | | a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); |
| | | return AddUnsigned(RotateLeft(a, s), b); |
| | | } |
| | | function HH(a, b, c, d, x, s, ac) { |
| | | a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); |
| | | return AddUnsigned(RotateLeft(a, s), b); |
| | | } |
| | | function II(a, b, c, d, x, s, ac) { |
| | | a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); |
| | | return AddUnsigned(RotateLeft(a, s), b); |
| | | } |
| | | function ConvertToWordArray(string) { |
| | | var lWordCount; |
| | | var lMessageLength = string.length; |
| | | var lNumberOfWords_temp1 = lMessageLength + 8; |
| | | var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; |
| | | var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; |
| | | var lWordArray = Array(lNumberOfWords - 1); |
| | | var lBytePosition = 0; |
| | | var lByteCount = 0; |
| | | while (lByteCount < lMessageLength) { |
| | | lWordCount = (lByteCount - (lByteCount % 4)) / 4; |
| | | lBytePosition = (lByteCount % 4) * 8; |
| | | lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); |
| | | lByteCount++; |
| | | } |
| | | lWordCount = (lByteCount - (lByteCount % 4)) / 4; |
| | | lBytePosition = (lByteCount % 4) * 8; |
| | | lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); |
| | | lWordArray[lNumberOfWords - 2] = lMessageLength << 3; |
| | | lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; |
| | | return lWordArray; |
| | | } |
| | | function WordToHex(lValue) { |
| | | var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount; |
| | | for (lCount = 0; lCount <= 3; lCount++) { |
| | | lByte = (lValue >>> (lCount * 8)) & 255; |
| | | WordToHexValue_temp = "0" + lByte.toString(16); |
| | | WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); |
| | | } |
| | | return WordToHexValue; |
| | | } |
| | | function Utf8Encode(string) { |
| | | var utftext = ""; |
| | | for (var n = 0; n < string.length; n++) { |
| | | var c = string.charCodeAt(n); |
| | | if (c < 128) { |
| | | utftext += String.fromCharCode(c); |
| | | } else if ((c > 127) && (c < 2048)) { |
| | | utftext += String.fromCharCode((c >> 6) | 192); |
| | | utftext += String.fromCharCode((c & 63) | 128); |
| | | } else { |
| | | utftext += String.fromCharCode((c >> 12) | 224); |
| | | utftext += String.fromCharCode(((c >> 6) & 63) | 128); |
| | | utftext += String.fromCharCode((c & 63) | 128); |
| | | } |
| | | } |
| | | return utftext; |
| | | } |
| | | module.exports = { |
| | | md5: md5 |
| | | } |