npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@zhike/ti-component

v2.0.24

Published

common components for Zhike-tiku

Downloads

25

Readme

ti-component

题库的通用组件,提取为依赖库并统一发布在npm

demo本地运行指南

点击查看在线demo或按照以下方法在本地运行demo

cnpm install 
npm run storybook
open http://localhost:3002/
目前只支持 cnpm启动;部分电脑npm启动还存在问题,目前还未解决;

  如果你本地未安装 cnpm命令;可以使用淘宝镜像进行安装

  npm install -g cnpm --registry=https://registry.npm.taobao.org

直接使用npm包指南

安装

npm install --save @zhike/ti-component

安装项目同级依赖,缺少依赖会触发npm警告,如已安装可跳过

npm install --save react aphrodite axios lodash form-data @zhike/ti-ui

在页面使用需要的组件

import React from 'react'
import { Modal } form '@zhike/ti-component'
import Header from 'xxx'
import AudioPlayer from 'xxx'

class MyComponent extends React.Component {
  componentDidMount() {
    Modal.show('ModalAlert', {
      title: 'Alert',
      buttons: [{ title: 'OK' }],
      width: 400,
      isUnhide: true,
      isReport: false,
      component: (
        <div>Hello World!</div>
      ),
    },
    onShow: () => {
      AudioPlayer.pause();
      Header.pauseTimerForModal();
    },
    onHide: () => {
      Header.startTimerForModal();
      AudioPlayer.resume();
    });
  }
}

export default MyComponent

开发指南

  1. 修改package.json文件的版本号
  2. 打包到lib文件夹并发布
npm run build
npm publish

API

Audio组件改造:

  • 调用该组件需要在props中传入cdnUrl字段,请从common/config引用

Modal组件改造:

  • type, option, onShow, onHide
  • type为字符串,可选值'ModalAlert''ModalCorrect'。根据传入的字符串匹配Modal内的实例对象,以后不需要在组件中引入实例
  • typeModalCorrect, 则props需要再传入一个option对象,用于上传纠错信息时添加自定义属性。必传值:
{
  version: '1.0.0', // 请从common/config引用version字段
  source: 'ti-base', // ti-base/ti-toefl/...
  getUploadSignature,
  postCorrection,
}
  • 新增加的onShow/onHide是为了降低耦合度,在抽离的组件中减少不合理的引用
  • onShow(可选),在isReportfalse的时候执行,一般情况下,传入以下方法:
() => {
  AudioPlayer.pause();
  Header.pauseTimerForModal();
}
  • onHide(可选),在isReportfalse,且Modal全部关闭后执行,一般情况下,传入以下方法:
() => {
  Header.startTimerForModal();
  AudioPlayer.resume();
}

Recorder组件改造:

  • start方法接收一个对象参数{callback, mode, skip}
  • callback方法为启动成功后的回调函数,默认空函数
  • mode/skip非必填,会在启动失败时用到,mode为字符串,skip为函数。如果启动失败,判断mode === 'mock',如果为true,则会在弹窗提示中添加一个“跳过口语”的按钮,点击触发skip方法

Article组件:

富文本渲染组件, 支持athene后台,插入的题库专用的富文本结构,支持的富文本结构如下:
{
    "paragraphs": [
        {
            "id": "b4d07a69-1207-6570-9a62-05d5051484c2",
            "text": "Dreamtime travel agency",
            "type": "Text"
        },
        {
            "id": "cefc2a71-0d89-1411-016b-f08ccd455752",
            "text": "Tour information",
            "type": "Text"
        },
        {
            "id": "69867f02-f19f-4c19-1d69-65a06d5b29d0",
            "text": " Example Answer",
            "type": "Text"
        },
        {
            "id": "2a887672-9f06-749a-5947-e9d539b224a8",
            "text": "Holiday name Whale Watch Experience",
            "type": "Text"
        },
        {
            "id": "b51aaffa-4e0b-fc8f-6f8c-dfb1f40e7862",
            "text": "Holiday length 2 days",
            "type": "Text"
        },
    ],
    "inlineMarkup": [
        {
            "pid": "b51aaffa-4e0b-fc8f-6f8c-dfb1f40e7862",
            "type": "BlankTable",
            "index": 17,
            "length": 4
        },
        {
            "pid": "b4d07a69-1207-6570-9a62-05d5051484c2",
            "type": "FontSize",
            "index": 0,
            "value": "h1",
            "length": 23
        },
        {
            "pid": "cefc2a71-0d89-1411-016b-f08ccd455752",
            "type": "FontSize",
            "index": 0,
            "value": "h2",
            "length": 16
        },
        {
            "pid": "69867f02-f19f-4c19-1d69-65a06d5b29d0",
            "type": "Bold",
            "index": 1,
            "length": 40
        },
    ],
    "articleMarkup": {},
    "paragraphMarkup": [
        {
            "pid": "b4d07a69-1207-6570-9a62-05d5051484c2",
            "type": "Align",
            "value": "center"
        },
        {
            "pid": "cefc2a71-0d89-1411-016b-f08ccd455752",
            "type": "Align",
            "value": "center"
        }
    ]
}

用于富文本的解析及渲染

富文本样式
  • 文章样式:

| 所在字段 |名称 | 字段 | value | | ------ | ------ | ------ | ------ | | articleMarkup |定位段 | anchorPid | pid | | articleMarkup | 起始段 | headPid | pid | | articleMarkup | 结尾段 | tailPid | pid |

  • 段落样式:

| 所在字段 |名称 | type | value | | ------ | ------ | ------ | ------ | | paragraphMarkup | 左对齐 | Align | left | | paragraphMarkup | 右对齐 | Align | right | | paragraphMarkup | 居中 | Align | center | | paragraphMarkup | 缩进 | Indent | | | paragraphMarkup | 添加图片 | Image | right | | paragraphMarkup | 添加音频 | Audio | center |

  • 行内样式:

| 所在字段 |名称 | type | value | | ------ | ------ | ------ | ------ | | inlineMarkup | 高亮 | Highlight | | | inlineMarkup | 加粗 | Bold | | | inlineMarkup | 斜体 | Italic | | | inlineMarkup | 下划线 | Underline | | | inlineMarkup | 填空 | InsertBlank | | | inlineMarkup | 表格填空 | BlankTable | | | inlineMarkup | 拖拽 | DragBlank | | | inlineMarkup | 大标题 | FontSize | h1 | | inlineMarkup | 小标题 | FontSize | h2 | | inlineMarkup | 普通 | FontSize | normal | | inlineMarkup | 上标 | FontSize | sup | | inlineMarkup | 下标 | FontSize | sub | | inlineMarkup | 插入耳机 | Earphone | left right | | inlineMarkup | 插入黑块️ | Insert | left right | | inlineMarkup | 插入箭头 | insertArrow | left right | | inlineMarkup | 插入短横线 | insertLine | left right | | inlineMarkup | 插入中横线 | insertLine | left right | | inlineMarkup | 插入长横线 | insertLine | left right |

  • Article 首先处理富文本段落,将段落进行分段处理,每段有对应的行内样式(表格题,填空题, 拖拽题),还有对应的段落样式(缩进,加粗,斜体,下划线, 字体大小),在段落中插入的(图片Image && 音频 Audio资源)
  • 内部的Block组件,实现每个段落的样式渲染;
  • isTextOnly 是否只有文本,则不具有行内样式和段落样式
  • handleAnswer 处理一些题目答案的回调函数
  • isReport 是否是报告页,报告页与答题页样式渲染有差异
  • location 托福题库中使用,切换页面时,富文本滑动定位到顶部
  • question 习题, 雅思在线练习,需要将多个变量进行合并
  • answer 数组,填空题,表格题,拖拽题用户的答案,用于报告页的渲染

雅思的富文本 新增添了一些功能

  • isIelts 来区分是否是雅思题库
  • qNum 雅思填空题 && 拖拽题 用来显示题号
  • materialIds雅思填空题 && 拖拽题 与footer组件配合使用,用来定位
  • answerRsult 雅思报告页答案集合
  • handleQuestionSelect 处理答案选中的回调函数
  • paragraphClassName 段落样式,用来从外部设置富文本的段落样式
表格填空题使用到的:
  • externalInitAnswer 外部累计InsertBlank数量