{"id":13990063,"url":"https://github.com/angular-ui/ui-calendar","last_synced_at":"2025-09-27T07:31:03.972Z","repository":{"id":7124908,"uuid":"8419931","full_name":"angular-ui/ui-calendar","owner":"angular-ui","description":"A complete AngularJS directive for the Arshaw FullCalendar.","archived":true,"fork":false,"pushed_at":"2019-01-21T19:46:47.000Z","size":4616,"stargazers_count":1483,"open_issues_count":223,"forks_count":720,"subscribers_count":96,"default_branch":"master","last_synced_at":"2025-09-10T23:43:26.650Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://angular-ui.github.io/ui-calendar/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular-ui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-02-25T22:39:04.000Z","updated_at":"2025-08-31T07:42:08.000Z","dependencies_parsed_at":"2022-09-05T22:00:58.430Z","dependency_job_id":null,"html_url":"https://github.com/angular-ui/ui-calendar","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/angular-ui/ui-calendar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui%2Fui-calendar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui%2Fui-calendar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui%2Fui-calendar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui%2Fui-calendar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular-ui","download_url":"https://codeload.github.com/angular-ui/ui-calendar/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui%2Fui-calendar/sbom","scorecard":{"id":196286,"data":{"date":"2025-08-11","repo":{"name":"github.com/angular-ui/ui-calendar","commit":"ac7a76c678a4eb8242a695d0ce133757345e6c31"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":6,"reason":"Found 12/19 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T21:53:36.536Z","repository_id":7124908,"created_at":"2025-08-16T21:53:36.536Z","updated_at":"2025-08-16T21:53:36.536Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275689717,"owners_count":25510365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-09T13:02:19.759Z","updated_at":"2025-09-27T07:31:03.707Z","avatar_url":"https://github.com/angular-ui.png","language":"JavaScript","readme":"# ui-calendar directive [![Build Status](https://travis-ci.org/angular-ui/ui-calendar.svg?branch=master)](https://travis-ci.org/angular-ui/ui-calendar)\r\n\r\n[![Join the chat at https://gitter.im/angular-ui/ui-calendar](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular-ui/ui-calendar?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\r\n\r\nA complete AngularJS directive for the Arshaw FullCalendar.\r\n\r\n# Requirements\r\n\r\n- ([AngularJS](http://code.angularjs.org/1.2.1/angular.js))\r\n- ([fullcalendar.js 2.0 and it's dependencies](http://arshaw.com/fullcalendar/download/))\r\n- optional - ([gcal-plugin](http://arshaw.com/js/fullcalendar-1.5.3/fullcalendar/gcal.js))\r\n\r\n# Usage\r\n\r\nUsing [bower](http://bower.io) run:\r\n\r\n    bower install --save angular-ui-calendar\r\n\r\nAlternatively you can add it to your `bower.json` like this:\r\n\r\n    dependencies: {\r\n        \"angular-ui-calendar\": \"latest\"\r\n    }\r\n\r\nAnd then run\r\n\r\n    bower install\r\n\r\nThis will copy the ui-calendar files into your `components` folder, along with its dependencies. Load the script and style files in your application:\r\n\r\n    \u003clink rel=\"stylesheet\" href=\"bower_components/fullcalendar/dist/fullcalendar.css\"/\u003e\r\n    \u003c!-- jquery, moment, and angular have to get included before fullcalendar --\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/jquery/dist/jquery.min.js\"\u003e\u003c/script\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/moment/min/moment.min.js\"\u003e\u003c/script\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/angular/angular.min.js\"\u003e\u003c/script\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/angular-ui-calendar/src/calendar.js\"\u003e\u003c/script\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/fullcalendar/dist/fullcalendar.min.js\"\u003e\u003c/script\u003e\r\n    \u003cscript type=\"text/javascript\" src=\"bower_components/fullcalendar/dist/gcal.js\"\u003e\u003c/script\u003e\r\n\r\nAdd the calendar module as a dependency to your application module:\r\n\r\n    var app = angular.module('App', ['ui.calendar'])\r\n\r\nApply the directive to your div elements. The calendar must be supplied an array of documented event sources to render itself:\r\n\r\n    \u003cdiv ui-calendar ng-model=\"eventSources\"\u003e\u003c/div\u003e\r\n\r\nDefine your model in a scope e.g.\r\n\r\n    $scope.eventSources = [];\r\n\r\n## Options\r\n\r\nAll the Arshaw Fullcalendar options can be passed through the directive. This even means function objects that are declared on the scope.\r\n\r\n    myAppModule.controller('MyController', function($scope) {\r\n        /* config object */\r\n        $scope.uiConfig = {\r\n          calendar:{\r\n            height: 450,\r\n            editable: true,\r\n            header:{\r\n              left: 'month basicWeek basicDay agendaWeek agendaDay',\r\n              center: 'title',\r\n              right: 'today prev,next'\r\n            },\r\n            eventClick: $scope.alertEventOnClick,\r\n            eventDrop: $scope.alertOnDrop,\r\n            eventResize: $scope.alertOnResize\r\n          }\r\n        };\r\n    });\r\n\r\n    \u003cdiv ui-calendar=\"uiConfig.calendar\" ng-model=\"eventSources\"\u003e\r\n\r\n## Working with ng-model\r\n\r\nThe ui-calendar directive plays nicely with ng-model.\r\n\r\nAn Event Sources object needs to be created to pass into ng-model. This object's values will be watched for changes. If a change occurs, then that specific calendar will call the appropriate fullCalendar method.\r\n\r\nThe ui-calendar directive expects the eventSources object to be any type allowed in the documentation for the fullcalendar. [docs](http://arshaw.com/fullcalendar/docs/event_data/Event_Source_Object/)\r\nNote that all calendar options which are functions that are passed into the calendar are wrapped in an apply automatically.\r\n\r\n## Accessing the calendar object\r\n\r\nIt is possible to access a specific calendar object by declaring a name for it on the uiCalendar directive. In this next line we are naming the calendar 'myCalendar'. This will be attached to the uiCalendarConfig constant object, that can be accessed via DI.\r\n\r\n    \u003cdiv ui-calendar=\"calendarOptions\" ng-model=\"eventSources\" calendar=\"myCalendar\"\u003e\r\n\r\nNow the calendar object is available in uiCalendarConfig.calendars:\r\n\r\n    uiCalendarConfig.calendars.myCalendar\r\n\r\nThis allows you to declare any number of calendar objects with distinct names.\r\n\r\n## Custom event rendering\r\n\r\nYou can use fullcalendar's `eventRender` option to customize how events are rendered in the calendar.\r\nHowever, only certain event attributes are watched for changes (they are `id`, `title`, `url`, `start`, `end`, `allDay`, and `className`).\r\n\r\nIf you need to automatically re-render other event data, you can use `calendar-watch-event`.\r\n`calendar-watch-event` expression must return a function that is passed `event` as argument and returns a string or a number, for example:\r\n\r\n    $scope.extraEventSignature = function(event) {\r\n       returns \"\" + event.price;\r\n    }\r\n\r\n    \u003cui-calendar calendar-watch-event=\"extraEventSignature(event)\" ... \u003e\r\n    // will now watch for price\r\n\r\n### Adding new events issue\r\n\r\nWhen adding new events to the calendar they can disappear when switching months. To solve this add `stick: true` to the event object being added to the scope.\r\n\r\n## Watching the displayed date range of the calendar\r\n\r\nThere is no mechanism to $watch the displayed date range on the calendar due to the JQuery nature of fullCalendar.  If you want\r\nto track the dates displayed on the calendar so you can fetch events outside the scope of fullCalendar (Say from a caching store\r\nin a service, instead of letting fullCalendar pull them via AJAX), you can add the viewRender callback to the calendar config.\r\n\r\n    $scope.calendarConfig = {\r\n        calendar:{\r\n            height: \"100%\",\r\n            ...\r\n            viewRender: function(view, element) {\r\n                $log.debug(\"View Changed: \", view.visStart, view.visEnd, view.start, view.end);\r\n            }\r\n        }\r\n    };\r\n\r\n# Minify\r\n\r\n    grunt minify\r\n\r\n# Local Server to test demo\r\n\r\n    grunt serve\r\n\r\n\r\n## Documentation for the Calendar\r\n\r\nThe calendar works alongside of all the documentation represented [here](http://arshaw.com/fullcalendar/docs)\r\n\r\n## PR's R always Welcome\r\nMake sure that if a new feature is added, that the proper tests are created.\r\n\r\n# Testing\r\n\r\nWe use karma and grunt to ensure the quality of the code.\r\n\r\n    npm install -g grunt-cli\r\n    npm install\r\n    bower install\r\n    grunt\r\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-ui%2Fui-calendar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular-ui%2Fui-calendar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-ui%2Fui-calendar/lists"}