Code Monkey home page Code Monkey logo

zotero-night's Introduction

Note

Development of this plugin has ceased, as Zotero has introduced it's own native dark mode in Zotero 7. Thank you for using the plugin!


🌌 Night for Zotero 6

⬇️ Download latest version

7️⃣ Click here for the version compatible with the Zotero 7 Beta

Install by downloading the latest version

Night theme for Zotero UI & Pdf

Also adds some animations and other UI changes.

Based on the Nord colorscheme and prior work by Rosmaninho.

✨ Features

◼️ Dark UI

Easier on the eyes for those late night deadlines.

🌚 Dark-mode for PDF

It's 2022, we can change the colors of PDFs. Choice between two themes: a very dark one, and one that matches the background color.

πŸ” Quick Toggle

Quickly toggle between different filters for the pdf

Screen.Recording.2022-04-19.at.14.39.11.mov

🌊 Miscellaneous UI improvements

Clean up the tab bar, add some animations here and there, get rid of all the borders.

⬇️ Install

Download the xpi from Releases. As always, if you're on Firefox, right-click -> Save link as....

Video instructions

Screen.Recording.2022-05-12.at.10.52.56.mov

Once installed in Zotero, activate it: Tools > Night Preferences, and select "Enable Dark Theme".

😒 Limitations

  • Popup menus do not have proper styling on some platforms.
  • currently using CSS filter functions in order to make the pdfs dark, however this is rather slow.

βœ… To-do

  • Make prettier, more curves. Basically redesign zotero a bit
  • Add more themes
  • Add user preferences
  • Write contributing guide

πŸ’ͺ Contributing

You're help is very welcome! However, getting setup for Zotero plugin development is a bit of a pain in the ass.

What you need to do

  • Download Zotero 60 ESR
  • Git clone
  • yarn
  • do the zotero plugin stuff (expound on this)
  • Launch zotero with --debugger and -somethingcaches
  • Launch Firefox 60
  • In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging.
  • In Zotero, go to setting, advanced, config editor, look up "debugging" and click on "allow remote debugging"
  • In Firefox, click the hamburger menu in the top right -> web developer -> Connect...
  • Enter localhost:6100
  • Connect
  • Click "Inspect Main Process"

Wow now you can finally do things.

Sponsors

If you really like Zotero Night, you can consider sponsoring me monthly!

If you donate $5/month or more, you'll be listed here and get priority for feature requests/bugfixes! (mention that you're a sponsor in the issue because i'll forget)

Jannis Segebrechtcb4chee

zotero-night's People

Contributors

github-actions[bot] avatar matbun avatar tefkah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zotero-night's Issues

Highlighting offset from cursor

When I begin highlighting a word, the highlight consistently begins a letter or two to the left and slightly above where my cursor is, so that it frequently highlights the line above where I'm clicking. Happens no matter what pdf I'm reading. When I disable the Night plugin and restart, this doesn't happen. Anything I can do to fix? Thanks!

Can not see Tags and Toolbar clearly.

As title. Something maybe worth mentioning is that I changed the font size in Zotero.

OS Platform: Win11 21H2
Zotero Version: 6.0.4
zotero-night: 0.2.1

Screenshots:
w/o zotero-night:
image

w/ zotero-night:
image

Editing comment in pdf reader has black text on dark background

If I highlight a sentence in the pdf reader and then add a comment to the highlight with the annotation pane closed, the text is black on dark background while editing. Once I click out of editing, it is black on white background and much more legible.

Untitled

Confused about contributing/editing style

I'm hoping to edit the theme or create a new one more like my personal style and to share! However, I can't figure out how to be able to edit/see changes β€” I saw that writing a contributing guide is on the to-do. Has anyone figured it out yet, regardless of OS?

Updating Night seems to crash BetterBibtex

I reported these issues on #15, but maybe it should be done in a new thread... so, here it is:

I think I am having the same problem on Windows.

On Zotero, I run the command to update the plugins (via Tools>Add-ons) and the main DB Tab turns to day mode (PDF tabs seem to work fine) and the theme toggle in the upper right corner disappeared. I have to restart the computer to bring back the dark mode. Moreover, the add-ons windows does not appear. It also seems to block the Better BibTex:

imagen

Also, here in github it appears that the latest version is 0.2.5, but I can't update the plugin from 0.2.2.

[Bug]The right information bar does not refresh

Description:
When I open a new PDF file for the first time, the content of the information bar on the right will not be updated. I need to switch back and forth with other tabs to update.

Environment

  • OS:macOS
  • Zotero Version(6.0.7)
  • Addon Version(0.4.8)
    iShot_2022-05-12_21 47 15

[BUG] PDF viewer does not switch to day mode after disabling dark mode globally

When I switch from night mode to day mode, the background colour of the current pdf is white, but the background colour of some other pdfs and newly opened pdfs is still black, I hope to fix these bugs as soon as possible, when I switch to day mode, I want all visible pdfs to be in day mode.Look at this image, the sign is clearly the sun, but it is in a night state.Obviously in the main screen of zotero I am in day mode, but when I enter the pdf I am in night mode (at this point the pdf still shows a little sun)
image

Originally posted by @heyeruoqi in #14

BUG: Settings for default PDF filter not working.

I have the Default PDF filter set to "none", but nevertheless, when I open a PDF, it defaults to the dark filter. In the PDF reader toolbar, the toggle for filters defaults to the "sun" symbol, correctly, but the actual filter applied is the dark filter.

To get the "none" setting, I have to use the toolbar toggle to cycle through the options back to "none"/ the sun symbol, at which point I will finally have no filter applied.

Dark mode/filter doesn't work for PDF reader any more (macOS 12.5)

First of all, thank you very much for your hard work!

Unfortunately, I have to report a potential bug. Since 4.10 the dark mode/filter for the PDF reader doesn't seem to work any more. Additionally, it appears that the dark mode and filter setting is lost after each app restart or quit.

Option for PDF filter is also missing:
Screenshot 2022-07-31 at 15 42 40
Screenshot 2022-07-31 at 15 44 50

  • Zotero version: 6.0.10
  • OS version: macOS Monterey (12.5)
  • Plug-in version: > 4.8

Do you need any further information, please let me know?

Kind regards

Requesting for sephia mode!

Thanks for this great tool. This has really saved my eyes at night! It will be great if we could have Sephia mode for easy reading during the day!

Highlighting collections containing an item feature broken

As mentioned in this post:
https://www.zotero.org/support/kb/collections_containing_an_item
Zotero allows you to highlight the collections containing an item by holding down the OPT key (macOS), CTRL key (Windows), or ALT key (Linux).

Unfortunately, it seems that the extension as is overnights the background color of the highlighted elements.

The dark mode toggle button fortunately allows the simple workaround of disabling the dark mode to find the element, but the experience could be even better!

Thank you for the great work anyway :D

The information tabs of an item and the tags can't be seen clearly

The background of the 4 tabs(info notes tags related) is white, and can't be seen clearly.
屏幕ζˆͺε›Ύ 2022-05-04 184736
And when my mouse pointing to a tag it can be highlighted properly, but when it is selected there is no highlight!I can't tell if the tag is selected or not.
image
I'm using Zotero 6 on windows 11.

[Bug] Drawing an area to create an annotation has no visual feedback

Drawing an are in the pdf view is slightly buggy. The drawing functionality still works as expected, however, while I draw an rectangle not visual feedback is given. This means that I don't see the border of the currently drawn rectangle. Only after I release the left mouse button the rectangle is correctly drawn.

I'm using WIndows 10 with the newest version of Zotero (6.0.10) and of this plugin (0.4.15)

What if I...?

So plugin development just in general is always such a PITA for sharing dev environments between devs. It really messes up the possibility of getting contributions. I experience this myself, and hell even knowing my way around all of this I don't want to do it 99% of the time even if I feel motivated to contribute.

So what about the most minimal dev environment I could setup for this in an actual VM that could be loaded up with virtualbox? I think I can get the actual image quite small and then allow for a user specified amount of attachable storage.

Looking for any feedback/concerns. Obviously hosting ISOs somewhere can be a problem.

Can you add the ability to customize the background color of the PDF reading page

Hello, Can you add the ability to customize the PDF background color in Night Preferences, Reading PDF papers on a green background during the day is something to protect our eyes,just like this:
image
by hte way,
when I used this theme to read the paper, the color of the picture in the paper was distorted, as follows:
image
The actual picture looks like this:
image
Best wishes

Linux GUI controlled by GTK Theme

I think this is the cause of #37, #40 (on Linux), and #31. I also made a post on the Zotero forum

Basically I noticed that the parts of Zotero's UI that don't darken on Linux change if you change the GTK theme for applications.
Here's a screenshot to show what I mean:
Screenshot from 2022-07-17 22-34-14
This is Zotero in nightmode, and the GTK theme for applications is set to Gruvbox. You can see that the scrollbars, the top part of the window, and the menu items with checkboxes are all sepia-ish.

I tried messing around with the GTK theme (which also uses CSS) and zotero-night and my (not super knowledgeable) findings are:

  1. Neither zotero-night nor GTK can reach everything in Zotero's GUI. zotero-night can't get to the parts that I pointed out in the above screenshot, and GTK can't get the tabs or the PDF reader.
  2. If you take out the parts of the GTK theme that affect Zotero's GUI it looks awful.
  3. Taking out some of the the CSS code from zotero-night and applying a matching GTK theme would result in a completely themed Zotero on Linux.
    Like this: zotero-night over a Nordic GTK theme
    Screenshot from 2022-08-01 01-36-31

I'm not sure what to do about all this. It would be great if the parts controlled by GTK could somehow be put into the .xpi theme.

Scrollbar theming

The add-in works amazingly. Thank you. Is it possible to do anything about the scrollbar color? I am on Mac OS, but looking at screenshots on other OSs the scrollbars also don't appear dark.

zotero-night scrollbars:
image

firefox scrollbars, for comparison:
image

Pdf dark mode does not work for right-most pdf

Hello @ThomasFKJorna , thank you so much! This is so great!

Little issue here, I cannot seem to get it working for the PDF itself. The UI gets dark, althought I cannot change from the two settings (Dark or Matching background), and I cannot change it back to day mode. I have to disable it to do so. The PDFs don't appear to react to the plugin.

Specs

MacOS Monterey 12.0.1
Zotero 6.0.5-beta.5
Zotero Night 0.1.1 (Latest).

Some screenshots.

The plugin works fine for the UI:
Captura de pantalla 2022-04-19 a las 16 36 27

But doesn't work for the PDF's themselves:
Captura de pantalla 2022-04-19 a las 16 36 33

And the preferences don't seem to respond either:
Captura de pantalla 2022-04-19 a las 16 40 03
Captura de pantalla 2022-04-19 a las 16 40 09

Make actual icons instead of emoji

Make actual icons instead of emoji

https://github.com/ThomasFKJorna/zotero-night/blob/27d8548beb34ff8ddc0c6a5dfe27eb33a521cdd8/content/zotero-night.ts#L327

      this._tabsAdded = true
    }
  }

  public getTabWindowById(id: string): Window | null {
    const tabIndex = Zotero_Tabs._tabs.findIndex((tab) => tab.id === id)

    debug(`Select tab event tabindex: ${tabIndex}`)

    if (tabIndex === -1) return null

    const activeTabWindow = window[1 + tabIndex]
    return activeTabWindow
  }

  public getTabNameById(id: string): string {
    const name =
      (Zotero_Tabs._tabs.find((tab) => tab.id === id)?.title as string) ??
      'Not found'
    return name
  }

  private addEverythingForTab(tabWindow: Window) {
    const doc = tabWindow.document
    // if (doc.querySelector('#pageStyle')) return

    debug('adding style for added window tab')
    const style = doc.createElement('style')
    style.setAttribute('id', 'pageStyle')
    style.textContent = css
    const header = doc.querySelector('head')
    header.appendChild(style)
    doc.querySelector('html[dir]').setAttribute('theme', 'dark')
    this.addToggleButton(tabWindow)

    //  this.editorNeedsStyle() && this.tryToAddStyleToEditor()
  }

  public toggleDarkTheme(on?: boolean) {
    const main = window.document.querySelector('#main-window')
    if (on) {
      main.setAttribute('theme', 'dark')
      this.setHTMLThemeAttribute(true)
      !this.getPref('enabled') && this.setPref('enabled', true)
      return
    }

    if (main.getAttribute('theme') === 'dark' || on === false) {
      main.removeAttribute('theme')
      this.setHTMLThemeAttribute(false)
      this.getPref('enabled') && this.setPref('enabled', false)
      return
    }
    main.setAttribute('theme', 'dark')
    this.setHTMLThemeAttribute(true)
    !this.getPref('enabled') && this.setPref('enabled', true)
  }

  public addGlobalToggleButton() {
    const toolbar = window.document.querySelector('#zotero-item-toolbar')
    const button = window.document.createElement('div')
    button.setAttribute('id', 'night-global-toggle')
    button.setAttribute('tab-index', '0')
    // TODO: Make actual icons instead of emoji

    const image = window.document.createElement('span')
    image.textContent = this.getPref('enabled') ? '🌚' : '🌞'
    button.appendChild(image)
    button.onclick = () => {
      this.toggleDarkTheme()
      image.textContent = this.getPref('enabled') ? '🌚' : '🌞'
    }

    toolbar.appendChild(button)
  }
  // eslint-disable-next-line @typescript-eslint/require-await
  public async load(globals: Record<string, any>) {
    this.globals = globals

929096ae0b7bc0a0a1ab205498c779cfaf4bb0d0

Is it possible to add the feature to switch the dark mode automatically?

Hey,

This plugin is very useful! Thanks for your great job!

My problem is that when I open Zotero, the default display is dark mode, and even if I manually switch to light mode, the next time I restart Zotero, it changes to dark mode again. (btw, I found the dark mode for PDF is not consist with the mode for UI; when I changed UI to light mode, the PDF still remained in dark mode.) Is it possible to keep the settings after a restart, i.e., keep the last mode I choose?

Moreover, could you please consider adding a feature to switch the night mode automatically? I use AutoDarkMode to manage my system display mode. I believe it would be more beneficial for Zotero Night to add a feature to follow the system settings or switch automatically at regular intervals.

Best wishes!

Figure out some way to remember per window setting

Figure out some way to remember per window setting

https://github.com/ThomasFKJorna/zotero-night/blob/c68e39357ff34d62ea3cdb9b12f7e1dc8600cf1e/content/zotero-night.ts#L101

  private globals: Record<string, any>
  private strings: any
  private _tabsAdded: boolean
  public _nordFilter: string
  public _darkFilter: string
  public _sepiaFilter: string

  constructor() {
    this._nordFilter =
      'invert(81%) sepia(23%) saturate(459%) hue-rotate(181deg) brightness(90%) contrast(93%)'

    this._darkFilter =
      'brightness(0.91) grayscale(0.15) invert(0.95) sepia(0.65) hue-rotate(180deg)'
  }

  /**
   * Open the preference window for Night
   */
  public openPreferenceWindow(paneID: any, action: any) {
    const io = {
      pane: paneID,
      action,
    }
    // @ts-expect-error
    window.openDialog(
      'chrome://zotero-night/content/options.xul',
      'night-options',
      `chrome,titlebar,toolbar,centerscreen${Zotero.Prefs.get(
        'browser.preferences.instantApply',
        true
      )}`
        ? 'dialog=no'
        : 'modal',
      io
    )
  }

  public getPref(pref: string) {
    return Zotero.Prefs.get(`extensions.night.${pref}`, true) as string
  }

  public setPref(pref: string, value: any) {
    return Zotero.Prefs.set(`extensions.night.${pref}`, value, true) as string
  }

  private hasToggle(readerWindow: Window): boolean {
    return !!readerWindow.document.querySelector('#night-toggle')
  }
  private hasFilter(readerWindow: Window): boolean {
    return !!readerWindow.document.querySelector('#filter-style')
  }

  private createFilterStyle(readerWindow: Window, nextStyle: string) {
    const filterStyle = readerWindow.document.createElement('style')
    const filter = nextStyle === 'match' ? this._nordFilter : this._darkFilter
    filterStyle.setAttribute('id', 'filter-style')
    filterStyle.textContent = `[theme='dark'] #viewer .page .canvasWrapper { filter:  ${filter} }`
    return filterStyle
  }

  // TODO: Just change the textcontents of the style, don't remove and append it constantly
  public toggleOnClick(readerWindow: Window, nextStyle: string) {
    if (this.hasFilter(readerWindow)) {
      readerWindow.document.querySelector('#filter-style').remove()
    }
    if (nextStyle === 'none') return

    const filterStyle = this.createFilterStyle(readerWindow, nextStyle)
    readerWindow.document.head.appendChild(filterStyle)
    return
  }

  // TODO: Figure out some way to remember per window setting
  private addToggleButton(readerWindow: Window) {
    if (this.hasToggle(readerWindow)) return

    const toggle: HTMLButtonElement =
      readerWindow.document.createElement('button')

    toggle.setAttribute('id', 'night-toggle')
    const defaultFilter = this.getPref('default_pdf')

    toggle.setAttribute('data:filter', defaultFilter)
    const icon =
      defaultFilter === 'match' ? '✨' : defaultFilter === 'dark' ? 'πŸŒ™' : 'β˜€οΈ'
    toggle.textContent = icon
    toggle.setAttribute(
      'style',
      'filter:none !important; height: 20px; width: 20px'
    )
    toggle.onclick = () => {
      const filter = toggle.getAttribute('data:filter')
      const nextStyle =
        filter === 'none' ? 'match' : filter === 'match' ? 'dark' : 'none'

      const icon = filter === 'none' ? '✨' : filter === 'match' ? 'πŸŒ™' : 'β˜€οΈ'

      toggle.textContent = icon
      this.toggleOnClick(readerWindow, nextStyle)
      toggle.setAttribute('data:filter', nextStyle)
    }

    const middleToolbar = readerWindow.document.querySelector(
      '#toolbarViewerMiddle'
    )
    middleToolbar.appendChild(toggle)

    const st = this.createFilterStyle(readerWindow, defaultFilter)
    readerWindow.document.head.appendChild(st)
  }

  public addStyleToEditor(editorWindow: Window) {
    const editorDoc = editorWindow.document
    const style = editorDoc.createElement('style')
    style.setAttribute('id', 'noteStyle')

4b040c63bd9ed47d5be525820f977432411d1d71

Top menu bar isn't fully dark

Top menu bar looks like this:

Otherwise seems fine. Using Linux Flatpak version.

Great plugin by the way, thanks for saving my eyes.

Just change the textcontents of the style, don't remove and append it constantly

Just change the textcontents of the style, don't remove and append it constantly

https://github.com/ThomasFKJorna/zotero-night/blob/c68e39357ff34d62ea3cdb9b12f7e1dc8600cf1e/content/zotero-night.ts#L89

  private globals: Record<string, any>
  private strings: any
  private _tabsAdded: boolean
  public _nordFilter: string
  public _darkFilter: string
  public _sepiaFilter: string

  constructor() {
    this._nordFilter =
      'invert(81%) sepia(23%) saturate(459%) hue-rotate(181deg) brightness(90%) contrast(93%)'

    this._darkFilter =
      'brightness(0.91) grayscale(0.15) invert(0.95) sepia(0.65) hue-rotate(180deg)'
  }

  /**
   * Open the preference window for Night
   */
  public openPreferenceWindow(paneID: any, action: any) {
    const io = {
      pane: paneID,
      action,
    }
    // @ts-expect-error
    window.openDialog(
      'chrome://zotero-night/content/options.xul',
      'night-options',
      `chrome,titlebar,toolbar,centerscreen${Zotero.Prefs.get(
        'browser.preferences.instantApply',
        true
      )}`
        ? 'dialog=no'
        : 'modal',
      io
    )
  }

  public getPref(pref: string) {
    return Zotero.Prefs.get(`extensions.night.${pref}`, true) as string
  }

  public setPref(pref: string, value: any) {
    return Zotero.Prefs.set(`extensions.night.${pref}`, value, true) as string
  }

  private hasToggle(readerWindow: Window): boolean {
    return !!readerWindow.document.querySelector('#night-toggle')
  }
  private hasFilter(readerWindow: Window): boolean {
    return !!readerWindow.document.querySelector('#filter-style')
  }

  private createFilterStyle(readerWindow: Window, nextStyle: string) {
    const filterStyle = readerWindow.document.createElement('style')
    const filter = nextStyle === 'match' ? this._nordFilter : this._darkFilter
    filterStyle.setAttribute('id', 'filter-style')
    filterStyle.textContent = `[theme='dark'] #viewer .page .canvasWrapper { filter:  ${filter} }`
    return filterStyle
  }

  // TODO: Just change the textcontents of the style, don't remove and append it constantly
  public toggleOnClick(readerWindow: Window, nextStyle: string) {
    if (this.hasFilter(readerWindow)) {
      readerWindow.document.querySelector('#filter-style').remove()
    }
    if (nextStyle === 'none') return

    const filterStyle = this.createFilterStyle(readerWindow, nextStyle)
    readerWindow.document.head.appendChild(filterStyle)
    return
  }

  // TODO: Figure out some way to remember per window setting
  private addToggleButton(readerWindow: Window) {
    if (this.hasToggle(readerWindow)) return

    const toggle: HTMLButtonElement =
      readerWindow.document.createElement('button')

    toggle.setAttribute('id', 'night-toggle')
    const defaultFilter = this.getPref('default_pdf')

    toggle.setAttribute('data:filter', defaultFilter)
    const icon =
      defaultFilter === 'match' ? '✨' : defaultFilter === 'dark' ? 'πŸŒ™' : 'β˜€οΈ'
    toggle.textContent = icon
    toggle.setAttribute(
      'style',
      'filter:none !important; height: 20px; width: 20px'
    )
    toggle.onclick = () => {
      const filter = toggle.getAttribute('data:filter')
      const nextStyle =
        filter === 'none' ? 'match' : filter === 'match' ? 'dark' : 'none'

      const icon = filter === 'none' ? '✨' : filter === 'match' ? 'πŸŒ™' : 'β˜€οΈ'

      toggle.textContent = icon
      this.toggleOnClick(readerWindow, nextStyle)
      toggle.setAttribute('data:filter', nextStyle)
    }

    const middleToolbar = readerWindow.document.querySelector(
      '#toolbarViewerMiddle'
    )
    middleToolbar.appendChild(toggle)

    const st = this.createFilterStyle(readerWindow, defaultFilter)
    readerWindow.document.head.appendChild(st)
  }

  public addStyleToEditor(editorWindow: Window) {
    const editorDoc = editorWindow.document
    const style = editorDoc.createElement('style')
    style.setAttribute('id', 'noteStyle')

09440a9f90afcdd7630a41b12c559929321ed620

Which CSS files to edit?

Hello, I've been messing around with the UserChrome.css file for the other dark zotero theme, and I was hoping to add some of the changes I made to it to this repo (not very experienced with CSS but I think I was able to figure out how to change the background of the "File Edit View Tools" menubar.)

I was able to get a development copy of the repo going but I'm having trouble figuring out which css files are actually used in the plugin. It seems like some don't do anything.

Which files should I edit to change the theme?

Contributing code for custom themes

Hi there,

I love this Zotero Night! Thanks for your excellent code.

Before I found this plugin, I was planning to develop the same one. So fast!

As this plugin is mature and wonderful, I'll stop my development and am willing to share my codes with you, if you think it would help.

My code is mainly about customizing themes, including a Preference UI, ugly though, and a CSS generator.

image

I see the supporting more themes in the TODO. If you think this custom theme feature is planned, we can merge/add our code to this repo in a proper way.

πŸ˜πŸ‘

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.