From b25ca0f8557bd170e743be9c353cda1106d3ec77 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 12:19:40 +0530 Subject: [PATCH 001/219] [enhancement] added verify password and ability to ignore submit comments --- frappe/core/doctype/user/user.py | 4 ++++ frappe/model/document.py | 6 ++++-- frappe/public/js/frappe/request.js | 8 ++++++-- frappe/public/js/frappe/ui/messages.js | 21 +++++++++++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 2982e461bb..dbe0463d20 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -342,6 +342,10 @@ def update_password(new_password, key=None): else: return "/" +@frappe.whitelist() +def verify_password(password): + frappe.local.login_manager.check_password(frappe.session.user, password) + @frappe.whitelist(allow_guest=True) def sign_up(email, full_name): user = frappe.db.get("User", {"email": email}) diff --git a/frappe/model/document.py b/frappe/model/document.py index 1cf8ce5703..8115e27a82 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -560,11 +560,13 @@ class Document(BaseDocument): elif self._action=="submit": self.run_method("on_update") self.run_method("on_submit") - self.add_comment("Submitted") + if not self.flags.ignore_submit_comment: + self.add_comment("Submitted") elif self._action=="cancel": self.run_method("on_cancel") self.check_no_back_links_exist() - self.add_comment("Cancelled") + if not self.flags.ignore_submit_comment: + self.add_comment("Cancelled") elif self._action=="update_after_submit": self.run_method("on_update_after_submit") diff --git a/frappe/public/js/frappe/request.js b/frappe/public/js/frappe/request.js index 0be0ca02a9..8d3f60c191 100644 --- a/frappe/public/js/frappe/request.js +++ b/frappe/public/js/frappe/request.js @@ -55,6 +55,10 @@ frappe.request.call = function(opts) { if(typeof data === "string") data = JSON.parse(data); opts.success_callback && opts.success_callback(data, xhr.responseText); }, + 401: function(xhr) { + msgprint(__("You have been logged out")); + frappe.app.logout(); + }, 404: function(xhr) { msgprint(__("Not found")); }, @@ -136,7 +140,7 @@ frappe.request.call = function(opts) { // call execute serverside request frappe.request.prepare = function(opts) { frappe.request.ajax_count++; - + $("body").attr("data-ajax-state", "triggered"); // btn indicator @@ -226,7 +230,7 @@ frappe.request.cleanup = function(opts, r) { } frappe.last_response = r; - + frappe.request.ajax_count--; if(!frappe.request.ajax_count) { $.each(frappe.request.waiting_for_ajax || [], function(i, fn) { diff --git a/frappe/public/js/frappe/ui/messages.js b/frappe/public/js/frappe/ui/messages.js index 38a1100384..7769a0010d 100644 --- a/frappe/public/js/frappe/ui/messages.js +++ b/frappe/public/js/frappe/ui/messages.js @@ -113,6 +113,27 @@ frappe.msgprint = function(msg, title) { return msg_dialog; } +frappe.verify_password = function(callback) { + frappe.prompt({ + fieldname: "password", + label: __("Enter your password"), + fieldtype: "Password", + reqd: 1 + }, function(data) { + frappe.call({ + method: "frappe.core.doctype.user.user.verify_password", + args: { + password: data.password + }, + callback: function(r) { + if(!r.exc) { + callback(); + } + } + }); + }, __("Verify Password"), __("Verify")) +} + var msgprint = frappe.msgprint; // Floating Message From b2ee616bb41d9b2390330e13b7c559b05999d06a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 25 May 2015 18:29:39 +0530 Subject: [PATCH 002/219] [help] helpers for youtube videos added in list, form sidebar, modules --- frappe/build.py | 4 +-- frappe/core/doctype/user/user_list.js | 2 ++ .../page/data_import_tool/data_import_tool.js | 3 ++ frappe/desk/moduleview.py | 3 +- .../email_account/email_account_list.js | 2 ++ frappe/public/build.json | 1 + .../public/js/frappe/form/form_sidebar.html | 3 ++ .../public/js/frappe/list/list_sidebar.html | 3 ++ frappe/public/js/frappe/misc/help.js | 31 +++++++++++++++++++ frappe/public/js/frappe/misc/user.js | 2 +- frappe/public/js/frappe/ui/page.js | 7 +++++ frappe/public/js/frappe/views/container.js | 2 ++ .../js/frappe/views/module/moduleview.js | 8 ++++- frappe/public/js/legacy/form.js | 7 ++--- frappe/public/js/lib/microtemplate.js | 1 + .../doctype/workflow/workflow_list.js | 2 ++ 16 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 frappe/public/js/frappe/misc/help.js diff --git a/frappe/build.py b/frappe/build.py index 0d27d75f53..42136f59fa 100644 --- a/frappe/build.py +++ b/frappe/build.py @@ -153,13 +153,13 @@ def pack(target, sources, no_compress, verbose): def html_to_js_template(path, content): # remove whitespace to a single space - content = re.sub("\s+", " ", content).replace("'", "\'") + content = re.sub("\s+", " ", content) # strip comments content = re.sub("()", "", content) return """frappe.templates["{key}"] = '{content}';\n""".format(\ - key=path.rsplit("/", 1)[-1][:-5], content=content) + key=path.rsplit("/", 1)[-1][:-5], content=content.replace("'", "\'")) def files_dirty(): for target, sources in get_build_maps().iteritems(): diff --git a/frappe/core/doctype/user/user_list.js b/frappe/core/doctype/user/user_list.js index 6256a52b24..227f84ee70 100644 --- a/frappe/core/doctype/user/user_list.js +++ b/frappe/core/doctype/user/user_list.js @@ -15,3 +15,5 @@ frappe.listview_settings['User'] = { } } }; + +frappe.help.youtube_id["User"] = "fnBoRhBrwR4"; diff --git a/frappe/core/page/data_import_tool/data_import_tool.js b/frappe/core/page/data_import_tool/data_import_tool.js index 142299d6e6..8810d0a5d6 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.js +++ b/frappe/core/page/data_import_tool/data_import_tool.js @@ -7,6 +7,9 @@ frappe.DataImportTool = Class.extend({ title: __("Data Import Tool"), single_column: true }); + this.page.add_inner_button(__("Help"), function() { + frappe.help.show_video("6wiriRKPhmg"); + }); this.make(); this.make_upload(); }, diff --git a/frappe/desk/moduleview.py b/frappe/desk/moduleview.py index 97785b305d..7c6e83c164 100644 --- a/frappe/desk/moduleview.py +++ b/frappe/desk/moduleview.py @@ -137,7 +137,8 @@ def apply_permissions(data): if ((item.type=="doctype" and item.name in user.can_read) or (item.type=="page" and item.name in allowed_pages) - or (item.type=="report" and item.doctype in user.can_get_report)): + or (item.type=="report" and item.doctype in user.can_get_report) + or item.type=="help"): new_items.append(item) diff --git a/frappe/email/doctype/email_account/email_account_list.js b/frappe/email/doctype/email_account/email_account_list.js index 2eb5cbe550..f3bbd99e9b 100644 --- a/frappe/email/doctype/email_account/email_account_list.js +++ b/frappe/email/doctype/email_account/email_account_list.js @@ -19,3 +19,5 @@ frappe.listview_settings["Email Account"] = { } } } + +frappe.help.youtube_id["Email Account"] = "YFYe0DrB95o"; diff --git a/frappe/public/build.json b/frappe/public/build.json index 8da0dd58bd..82849f6a16 100644 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -95,6 +95,7 @@ "public/js/frappe/misc/tools.js", "public/js/frappe/misc/datetime.js", "public/js/frappe/misc/number_format.js", + "public/js/frappe/misc/help.js", "public/js/frappe/ui/upload.html", "public/js/frappe/upload.js", diff --git a/frappe/public/js/frappe/form/form_sidebar.html b/frappe/public/js/frappe/form/form_sidebar.html index b77400f0fb..5a4a02c5d0 100644 --- a/frappe/public/js/frappe/form/form_sidebar.html +++ b/frappe/public/js/frappe/form/form_sidebar.html @@ -9,6 +9,9 @@ 0 + {% if(frappe.help.has_help(doctype)) { %} +
  • {{ __("Help") }}
  • + {% } %} diff --git a/frappe/public/js/frappe/misc/help.js b/frappe/public/js/frappe/misc/help.js new file mode 100644 index 0000000000..12df8ba674 --- /dev/null +++ b/frappe/public/js/frappe/misc/help.js @@ -0,0 +1,31 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// MIT License. See license.txt + +frappe.provide("frappe.help"); + +frappe.help.youtube_id = {}; + +frappe.help.has_help = function(doctype) { + return frappe.help.youtube_id[doctype]; +} + +frappe.help.show_link = function() { + +} + +frappe.help.show = function(doctype) { + if(frappe.help.youtube_id[doctype]) { + frappe.help.show_video(frappe.help.youtube_id[doctype]); + } +} + +frappe.help.show_video = function(youtube_id, title) { + frappe.msgprint('', title || __("Help")); +} + +$("body").on("click", "a.help-link", function() { + var doctype = $(this).attr("data-doctype"); + doctype && frappe.help.show(doctype); +}); diff --git a/frappe/public/js/frappe/misc/user.js b/frappe/public/js/frappe/misc/user.js index 641b8296e5..f9d9d66f7f 100644 --- a/frappe/public/js/frappe/misc/user.js +++ b/frappe/public/js/frappe/misc/user.js @@ -132,7 +132,7 @@ $.extend(frappe.user, { var ret = null; switch(type) { case "module": - if(frappe.boot.user.allow_modules.indexOf(m)!=-1) + if(frappe.boot.user.allow_modules.indexOf(m)!=-1 || frappe.modules[m].is_help) ret = m; break; case "page": diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 1df246f0ff..1d5ba89247 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -85,7 +85,9 @@ frappe.ui.Page = Class.extend({ this.actions_btn_group = this.page_actions.find(".actions-btn-group"); this.page_form = $('
    ').prependTo(this.main); + this.inner_toolbar = $('
    ').prependTo(this.main); this.icon_group = this.page_actions.find(".page-icon-group"); + }, set_indicator: function(label, color) { @@ -225,6 +227,11 @@ frappe.ui.Page = Class.extend({ return $('
  • ').appendTo(this.menu); }, + add_inner_button: function(label, action) { + return $(' + + {{ _("Cancel") }} + {% elif is_list %} + + {{ _("New {0}").format(_(doc_type)) }} + + {% endif %} +{% endblock %} + {% block content %}
    @@ -23,48 +36,108 @@

    -{% elif (login_required and allow_multiple and not params.name and not params.new) %} -

    - - {{ _("New {0}").format(_(doc_type)) }} - -

    -
    - {% for i in items %} -
    - {% if allow_delete %} - - {% endif %} - - {{ i.title }} -
    -
    - {{ frappe.format_date(i.creation) }} -
    -
    - {% endfor %} -
    +{% elif is_list %} + {% include "templates/includes/list/list.html" %} + {% else %} -{%- macro properties(field) %}name="{{ field.fieldname }}" id="{{ field.fieldname }}" {% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %} data-label="{{ field.label }}" data-fieldtype="{{ field.fieldtype }}" {{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }} {{ field.read_only and "disabled" or "" }}{% endmacro -%} +
    + +{%- macro properties(field) %} + name="{{ field.fieldname }}" id="{{ field.fieldname }}" + {% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %} + data-label="{{ field.label }}" data-fieldtype="{{ field.fieldtype }}" + {{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }} + {{ field.read_only and "disabled" or "" }} +{% endmacro -%} {%- macro value(field) -%}{% if doc %}{{ doc.get(field.fieldname) or field.default or "" }}{% else %}{{ getCookie(field.options) or field.default or "" }}{% endif %}{%- endmacro -%} {%- macro help(field) -%} -{% if field.description -%} -{{ field.description }} -{%- endif -%} + {% if field.description -%} + {{ field.description }} + {%- endif -%} {%- endmacro %} -{% macro label(field) %}{% endmacro %} +{% macro label(field) %} + +{% endmacro %} +{% macro render_field(field) %} + {% if field.hidden %} + + {% elif field.fieldtype == "HTML" and field.options %} +
    + {{ field.options }} +
    + {% elif field.fieldtype in ("Data", "Date", "Datetime") %} +
    + {{ label(field) }} + + {{ help(field) }} +
    + {% elif field.fieldtype=="Select" %} +
    + {{ label(field) }} + + {{ help(field) }} +
    + {% elif field.fieldtype=="Text" %} +
    + {{ label(field) }} + + {{ help(field) }} +
    + {% elif field.fieldtype=="Attach" %} +
    + {{ label(field) }} + {% if value(field) -%} +

    + + + {{ doc.get(field.fieldname) }} + +
    +

    + {%- endif %} +

    + +

    + {{ help(field) }} +
    + {% elif field.fieldtype=="Check" %} +
    +
    + + {{ help(field) }} +
    +
    + {% endif %} +{% endmacro %}
    -
    {% if params.name and web_page_link_text %}
    -
    +
    {{ web_page_link_text }} @@ -77,97 +150,24 @@ {% if params.name -%} {%- endif %} -{% for field in web_form_fields %} - {% if field.hidden %} - - {% elif field.fieldtype == "HTML" and field.options %} -
    - {{ field.options }} -
    - {% elif field.fieldtype in ("Data", "Date", "Datetime") %} -
    - {{ label(field) }} -
    - - {{ help(field) }} -
    -
    - {% elif field.fieldtype=="Select" %} -
    - {{ label(field) }} -
    - - {{ help(field) }} -
    -
    - {% elif field.fieldtype=="Text" %} -
    - {{ label(field) }} -
    - - {{ help(field) }} -
    -
    - {% elif field.fieldtype=="Attach" %} -
    - {{ label(field) }} -
    - {% if value(field) -%} -

    - - - {{ doc.get(field.fieldname) }} - -
    -

    - {%- endif %} -

    - -

    - {{ help(field) }} -
    -
    - {% elif field.fieldtype=="Check" %} -
    -
    -
    - - {{ help(field) }} -
    -
    -
    - {% endif %} -{% endfor %} -
    -
    - - Cancel -
    -
    + + {% for section in layout %} +
    + {% for column in section %} +
    + {% for field in column %} + {{ render_field(field) }} + {% endfor %} +
    + {% endfor %} +
    + {% endfor %} {% if allow_comments -%} -
    -
    -
    -

    {{ _("Comments") }}

    - {% include 'templates/includes/comments/comments.html' %} -
    +
    +

    +

    {{ _("Comments") }}

    + {% include 'templates/includes/comments/comments.html' %}
    {%- endif %} {% endif %} @@ -177,6 +177,7 @@ diff --git a/frappe/templates/pages/update_password.py b/frappe/templates/pages/update_password.py index e4c485ceed..5ed7ad913d 100644 --- a/frappe/templates/pages/update_password.py +++ b/frappe/templates/pages/update_password.py @@ -1,5 +1,11 @@ # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt +# MIT License. See license.txt from __future__ import unicode_literals +from frappe import _ + no_sitemap = 1 +no_cache = 1 + +def get_context(context): + context.parents = [{"name":"me", "title":_("My Account")}] diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index e04293eef2..ae1fb66423 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -6,6 +6,8 @@ import frappe, json from frappe.website.website_generator import WebsiteGenerator from frappe import _ from frappe.utils.file_manager import save_file, remove_file_by_url +from frappe.website.utils import get_comment_list +from frappe.templates.pages.list import get_context as get_list_context class WebForm(WebsiteGenerator): website = frappe._dict( @@ -20,13 +22,10 @@ class WebForm(WebsiteGenerator): if self.login_required and frappe.session.user != "Guest": if self.allow_edit: if self.allow_multiple: - meta = frappe.get_meta(self.doc_type) - context.items = frappe.db.sql("""select name, - {0} as title, creation - from `tab{1}` - where owner=%s and docstatus = 0 - order by creation desc""".format(meta.title_field or "name", - self.doc_type), frappe.session.user, as_dict=True) + if not context.params.name: + frappe.form_dict.doctype = self.doc_type + get_list_context(context) + context.is_list = True else: name = frappe.db.get_value(self.doc_type, {"owner": frappe.session.user}, "name") @@ -34,13 +33,38 @@ class WebForm(WebsiteGenerator): frappe.form_dict.name = name if frappe.form_dict.name: + context.layout = self.get_layout() context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name) + context.title = context.doc.get(context.doc.meta.get_title_field()) + context.parents = [{"name": self.get_route(), "title": self.title }] + + context.comment_doctype = context.doc.doctype + context.comment_docname = context.doc.name + + if self.allow_comments: + context.comment_list = get_comment_list(context.doc.doctype, context.doc.name) context.types = [f.fieldtype for f in self.web_form_fields] return context + def get_layout(self): + layout = [] + for df in self.web_form_fields: + if df.fieldtype=="Section Break" or not layout: + layout.append([]) + + if df.fieldtype=="Column Break" or not layout[-1]: + layout[-1].append([]) + + if df.fieldtype not in ("Section Break", "Column Break"): + layout[-1][-1].append(df) + + return layout + def get_parents(self, context): - if self.breadcrumbs: + if context.parents: + return context.parents + elif self.breadcrumbs: return json.loads(self.breadcrumbs) @frappe.whitelist(allow_guest=True) diff --git a/frappe/website/doctype/web_form_field/web_form_field.json b/frappe/website/doctype/web_form_field/web_form_field.json index 782182b2cc..9ad0f437a7 100644 --- a/frappe/website/doctype/web_form_field/web_form_field.json +++ b/frappe/website/doctype/web_form_field/web_form_field.json @@ -36,7 +36,7 @@ "in_list_view": 1, "label": "Fieldtype", "no_copy": 0, - "options": "Attach\nCheck\nData\nDate\nDatetime\nHTML\nSelect\nText", + "options": "Attach\nCheck\nData\nDate\nDatetime\nHTML\nSelect\nText\nSection Break\nColumn Break", "permlevel": 0, "print_hide": 0, "read_only": 0, @@ -59,7 +59,7 @@ "print_hide": 0, "read_only": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0 }, @@ -194,7 +194,7 @@ "is_submittable": 0, "issingle": 0, "istable": 1, - "modified": "2014-09-03 15:47:51.643284", + "modified": "2015-06-01 06:45:30.240450", "modified_by": "Administrator", "module": "Website", "name": "Web Form Field", From 19202375c96c80c9524f19ff9d637487dbefeda7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 1 Jun 2015 17:30:17 +0530 Subject: [PATCH 064/219] [style] blog list, no hover --- frappe/public/css/website.css | 3 +++ frappe/public/less/website.less | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index 994002dd0a..3608b07b5b 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -578,6 +578,9 @@ fieldset { .blog-list-content .web-list-item { padding: 0px; } +.blog-list-content .web-list-item:hover { + background: transparent; +} .longform { padding: 15px 0px; line-height: 1.5; diff --git a/frappe/public/less/website.less b/frappe/public/less/website.less index d340c9cb3e..a439fd587b 100644 --- a/frappe/public/less/website.less +++ b/frappe/public/less/website.less @@ -259,6 +259,10 @@ fieldset { padding: 0px; } +.blog-list-content .web-list-item:hover { + background: transparent; +} + .longform { padding: 15px 0px; line-height: 1.5; From 2716f4a613c7fabbd7bcbf9f13ed0c7dc87c8fcd Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 1 Jun 2015 17:43:08 +0530 Subject: [PATCH 065/219] [fixes] [tests] web forms --- frappe/desk/doctype/event/event.py | 4 ++++ frappe/templates/generators/web_form.html | 2 +- frappe/templates/pages/list.py | 4 +++- frappe/website/doctype/web_form/web_form.py | 16 +++++++++------- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 29f964315c..ba18cb506e 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -11,6 +11,10 @@ from frappe.utils.user import get_enabled_system_users weekdays = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"] class Event(Document): + def get_route(self): + """for test-case""" + return "/Event/" + self.name + def validate(self): if self.starts_on and self.ends_on and self.starts_on > self.ends_on: frappe.msgprint(frappe._("Event end must be after start"), raise_exception=True) diff --git a/frappe/templates/generators/web_form.html b/frappe/templates/generators/web_form.html index 75ee451d84..118e13f395 100644 --- a/frappe/templates/generators/web_form.html +++ b/frappe/templates/generators/web_form.html @@ -163,7 +163,7 @@
    {% endfor %} -{% if allow_comments -%} +{% if allow_comments and not params.new -%}


    {{ _("Comments") }}

    diff --git a/frappe/templates/pages/list.py b/frappe/templates/pages/list.py index 6129f10585..38d0781abb 100644 --- a/frappe/templates/pages/list.py +++ b/frappe/templates/pages/list.py @@ -60,7 +60,9 @@ def get(doctype, txt=None, limit_start=0, **kwargs): row_template = list_context.row_template or "templates/includes/list/row_template.html" for doc in raw_result: doc.doctype = doctype - new_context = { "doc": doc, "meta": meta, "pathname": frappe.local.request.path.strip("/ ") } + new_context = { "doc": doc, "meta": meta } + if not frappe.flags.in_test: + new_context.pathname = frappe.local.request.path.strip("/ ") new_context.update(list_context) rendered_row = frappe.render_template(row_template, new_context, is_path=True) result.append(rendered_row) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index ae1fb66423..4e098ed5c8 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -22,7 +22,7 @@ class WebForm(WebsiteGenerator): if self.login_required and frappe.session.user != "Guest": if self.allow_edit: if self.allow_multiple: - if not context.params.name: + if not context.params.name and not context.params.new: frappe.form_dict.doctype = self.doc_type get_list_context(context) context.is_list = True @@ -32,16 +32,18 @@ class WebForm(WebsiteGenerator): if name: frappe.form_dict.name = name - if frappe.form_dict.name: + if frappe.form_dict.name or frappe.form_dict.new: context.layout = self.get_layout() - context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name) - context.title = context.doc.get(context.doc.meta.get_title_field()) context.parents = [{"name": self.get_route(), "title": self.title }] - context.comment_doctype = context.doc.doctype - context.comment_docname = context.doc.name + if frappe.form_dict.name: + context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name) + context.title = context.doc.get(context.doc.meta.get_title_field()) - if self.allow_comments: + context.comment_doctype = context.doc.doctype + context.comment_docname = context.doc.name + + if self.allow_comments and frappe.form_dict.name: context.comment_list = get_comment_list(context.doc.doctype, context.doc.name) context.types = [f.fieldtype for f in self.web_form_fields] From 2ba83e464f3946c236adb27ab4a67f572e8151a0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 1 Jun 2015 17:47:17 +0530 Subject: [PATCH 066/219] [fixes] [tests] web forms --- frappe/templates/generators/web_form.html | 5 ++--- frappe/templates/pages/list.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/frappe/templates/generators/web_form.html b/frappe/templates/generators/web_form.html index 118e13f395..ee3ecaa839 100644 --- a/frappe/templates/generators/web_form.html +++ b/frappe/templates/generators/web_form.html @@ -102,12 +102,11 @@
    {{ label(field) }} {% if value(field) -%} -

    - +

    {{ doc.get(field.fieldname) }} -

    {%- endif %} diff --git a/frappe/templates/pages/list.py b/frappe/templates/pages/list.py index 38d0781abb..ee227ff72b 100644 --- a/frappe/templates/pages/list.py +++ b/frappe/templates/pages/list.py @@ -62,7 +62,7 @@ def get(doctype, txt=None, limit_start=0, **kwargs): doc.doctype = doctype new_context = { "doc": doc, "meta": meta } if not frappe.flags.in_test: - new_context.pathname = frappe.local.request.path.strip("/ ") + new_context["pathname"] = frappe.local.request.path.strip("/ ") new_context.update(list_context) rendered_row = frappe.render_template(row_template, new_context, is_path=True) result.append(rendered_row) From f51f430b3beff593ba7c16247b1a01cb5d3dfb1d Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Mon, 1 Jun 2015 19:04:01 +0530 Subject: [PATCH 067/219] Update translations --- frappe/translations/ar.csv | 71 ++++--- frappe/translations/es.csv | 80 ++++---- frappe/translations/fa.csv | 40 ++-- frappe/translations/fr.csv | 36 ++-- frappe/translations/hu.csv | 282 +++++++++++++-------------- frappe/translations/ja.csv | 256 ++++++++++++------------- frappe/translations/pt-BR.csv | 4 +- frappe/translations/ro.csv | 348 +++++++++++++++++----------------- frappe/translations/ru.csv | 4 +- frappe/translations/zh-tw.csv | 26 +-- 10 files changed, 573 insertions(+), 574 deletions(-) diff --git a/frappe/translations/ar.csv b/frappe/translations/ar.csv index 423e7484e0..7e0455df59 100644 --- a/frappe/translations/ar.csv +++ b/frappe/translations/ar.csv @@ -27,7 +27,7 @@ apps/frappe/frappe/core/page/data_import_tool/exporter.py +51,Data Import Templa sites/assets/js/desk.min.js +536,Parent,أصل sites/assets/js/desk.min.js +826,"document type..., e.g. customer", نوع الوثيقة ... ، على سبيل المثال العملاء apps/frappe/frappe/print/doctype/print_format/print_format.py +29,Syntax error in Jinja template,خطأ في القالب جينجا -DocType: About Us Settings,"""Team Members"" or ""Management""","أعضاء الفريق" أو "إدارة" +DocType: About Us Settings,"""Team Members"" or ""Management""","""أعضاء الفريق"" أو ""الإدارة""" apps/frappe/frappe/core/doctype/doctype/doctype.py +267,Default for 'Check' type of field must be either '0' or '1',يجب أن يكون الافتراضي ل 'تحقق' نوع من المجال إما '0' أو '1' DocType: Email Account,Enable Incoming,تمكين واردة DocType: Workflow State,Danger,خطر @@ -81,7 +81,7 @@ apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +61,"Insert After DocType: Workflow State,circle-arrow-up,دائرة السهم إلى أعلى sites/assets/js/desk.min.js +765,Uploading...,تحميل ... DocType: Workflow State,italic,مائل -apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import without Create,{0} : لا يمكن تعيين استيراد دون إنشاء +apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import without Create,{0} : لا يمكن تحديد استيراد دون إنشاء DocType: Comment,Post Topic,كتابة موضوع apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +2,Widths can be set in px or %.,الاعراض يمكن تعيين في مقصف أو٪. apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +6,Permissions get applied on Users based on what Roles they are assigned.,الحصول على تطبيق الأذونات على المستخدمين على أساس ما الأدوار التي تم تعيينها . @@ -123,7 +123,7 @@ DocType: Workflow,Defines workflow states and rules for a document.,تعرف ا DocType: DocType,Show this field as title,تظهر هذا المجال كما لقب apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},FIELDNAME {0} لا يمكن أن يكون أحرف خاصة مثل {1} apps/frappe/frappe/model/document.py +388,Error: Document has been modified after you have opened it,تم تعديل الوثيقة بعد أن كنت قد فتحه: خطأ -apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0} : لا يمكن تعيين تعيين إرسال إذا لم Submittable +apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0} : لا يمكن تحديد تعيين بالتأكيد إذا لم يكن قابل للتأكيد DocType: Social Login Keys,Facebook,الفيسبوك apps/frappe/frappe/templates/pages/list.py +59,"Filtered by ""{0}""",تمت تصفيتها من قبل "{0}" sites/assets/js/desk.min.js +910,Message from {0},رسالة من {0} @@ -177,7 +177,7 @@ apps/frappe/frappe/utils/nestedset.py +210,Merging is only possible between Grou apps/frappe/frappe/utils/file_manager.py +40,Added {0},وأضاف {0} DocType: Currency,Fraction Units,جزء الوحدات DocType: Web Page,Parent Web Page,صفحة ويب الأم -apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} يجب تعيين أول +apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} يجب تحديده أولا DocType: Workflow State,plane,طائرة apps/frappe/frappe/core/page/data_import_tool/exporter.py +64,"If you are uploading new records, ""Naming Series"" becomes mandatory, if present.","إذا كنت تحميل سجلات جديدة، ""تسمية السلسلة"" تصبح إلزامية، إذا كان موجودا." apps/frappe/frappe/core/doctype/doctype/doctype.py +294,Fold can not be at the end of the form,أضعاف لا يمكن أن يكون في نهاية النموذج @@ -220,7 +220,7 @@ apps/frappe/frappe/print/doctype/print_format/print_format.js +14,Please duplica DocType: Print Settings,Font Size,حجم الخط sites/assets/js/desk.min.js +852,Unread Messages,رسائل غير مقروءة DocType: Workflow State,facetime-video,فيس تايم عن طريق الفيديو -apps/frappe/frappe/website/doctype/blog_post/blog_post.py +164,1 comment,1 تعليق +apps/frappe/frappe/website/doctype/blog_post/blog_post.py +164,1 comment,واحد تعليق DocType: Email Alert,Days Before,أيام قبل apps/frappe/frappe/website/doctype/website_settings/website_settings.js +72,Select a Banner Image first.,تحديد صورة بانر الأول. DocType: Workflow State,volume-down,حجم إلى أسفل @@ -248,13 +248,13 @@ DocType: Workflow Transition,Defines actions on states and the next step and all apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +11,"As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.",باعتبارها أفضل الممارسات ، عدم تعيين نفس مجموعة من الحكم إذن ل أدوار مختلفة. بدلا من ذلك ، تعيين أدوار متعددة ل نفس العضو . DocType: Web Form,Message to be displayed on successful completion,رسالة ليتم عرضها على الانتهاء بنجاح DocType: Website Settings,Footer Items,تذييل العناصر -sites/assets/js/desk.min.js +328,Menu,قائمة الطعام +sites/assets/js/desk.min.js +328,Menu,الخيارات DocType: DefaultValue,DefaultValue,الافتراضية apps/frappe/frappe/config/setup.py +19,User Roles,أدوار المستخدم DocType: Property Setter,Property Setter overrides a standard DocType or Field property,الملكية واضعة يتجاوز على DOCTYPE القياسية أو الممتلكات الميدان apps/frappe/frappe/core/doctype/user/user.py +332,Cannot Update: Incorrect / Expired Link.,لا يمكن تحديث : رابط غير الصحيحة / منتهية الصلاحية . DocType: DocField,Set Only Once,تعيين مرة واحدة فقط -apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import as {1} is not importable,{0} : لا يمكن تعيين استيراد ك {1} ليس ارداتها +apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import as {1} is not importable,{0} : لا يمكن تحديد استيراد، لأن {1} غير قابل للإستيراد DocType: Top Bar Item,"target = ""_blank""",الهدف = "_blank" DocType: Workflow State,hdd,الأقراص الصلبة apps/frappe/frappe/desk/query_report.py +18,You don't have access to Report: {0},لم يكن لديك الوصول إلى تقرير: {0} @@ -275,7 +275,7 @@ DocType: Website Theme,Google Font (Text),جوجل الخط (نص) apps/frappe/frappe/core/page/permission_manager/permission_manager.js +316,Did not remove,لم تقم بإزالة DocType: Report,Query,سؤال DocType: DocType,Sort Order,ترتيب -apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},'في قائمة عرض ' لا يسمح لنوع {0} في {1} الصف +apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},'في عرض القائمة' لا يسمح لنوع {0} في {1} الصف DocType: Custom Field,Select the label after which you want to insert new field.,حدد التسمية بعد الذي تريد إدراج حقل جديد. DocType: Website Settings,Tweet will be shared via your user account (if specified),وسيتم تقاسم تويت عبر حساب المستخدم الخاص بك (في حالة تحديد) ,Document Share Report,وثيقة حصة تقرير @@ -293,7 +293,7 @@ DocType: DocField,Index,مؤشر sites/assets/js/editor.min.js +107,Number list,قائمة رقم apps/frappe/frappe/desk/page/messages/messages_sidebar.html +9,Everyone,كل شخص DocType: Workflow State,backward,الى الوراء -apps/frappe/frappe/config/setup.py +79,Set numbering series for transactions.,تعيين ترقيم سلسلة للمعاملات . +apps/frappe/frappe/config/setup.py +79,Set numbering series for transactions.,تحديد الترقيم المتسلسل للمعاملات . DocType: Email Account,POP3 Server,POP3 خادم DocType: User,Last IP,مشاركة IP apps/frappe/frappe/core/doctype/communication/communication.js +17,Add To,اضف إليه @@ -303,7 +303,7 @@ apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +29,Fieldname not sites/assets/js/desk.min.js +536,Last Updated By,آخر تحديث بواسطة DocType: Website Theme,Background Color,لون الخلفية sites/assets/js/desk.min.js +893,There were errors while sending email. Please try again.,كانت هناك أخطاء أثناء إرسال البريد الإلكتروني. يرجى المحاولة مرة أخرى. -DocType: Web Page,0 is highest,0 هو أعلى +DocType: Web Page,0 is highest,0 أعلى قيمة DocType: Email Alert,Value Changed,قيمة تغيير apps/frappe/frappe/model/base_document.py +263,Duplicate name {0} {1},تكرار اسم {0} {1} DocType: Web Form Field,Web Form Field,حقل نموذج الويب @@ -324,8 +324,8 @@ apps/frappe/frappe/website/doctype/web_page/web_page.py +30,Cannot edit template apps/frappe/frappe/model/document.py +637,none of,أيا من apps/frappe/frappe/core/page/user_permissions/user_permissions.js +127,Upload User Permissions,تحميل ضوابط العضو apps/frappe/frappe/core/page/desktop/all_applications_dialog.html +3,Checked items will be shown on desktop,سيتم عرض العناصر المحددة على سطح المكتب -apps/frappe/frappe/core/doctype/doctype/doctype.py +409,{0} cannot be set for Single types,{0} لا يمكن تعيين لأنواع واحدة -apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +97,{0} updated,{0} تحديث +apps/frappe/frappe/core/doctype/doctype/doctype.py +409,{0} cannot be set for Single types,{0} لا يمكن تحديده لأنواع أحادية +apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +97,{0} updated,{0} تم تحديث apps/frappe/frappe/core/doctype/doctype/doctype.py +399,Report cannot be set for Single types,لا يمكن تعيين التقرير لأنواع واحدة apps/frappe/frappe/desk/page/activity/activity.js +152,Feb,فبراير DocType: DocPerm,Role,دور @@ -345,7 +345,7 @@ DocType: About Us Settings,Company Introduction,الشركة مقدمة DocType: DocPerm,Apply User Permissions,تطبيق ضوابط العضو DocType: User,Modules HTML,وحدات HTML sites/assets/js/desk.min.js +403,Missing Values Required,في عداد المفقودين القيم المطلوبة -sites/assets/js/list.min.js +105,{0} is not set,{0} لم يتم تعيين +sites/assets/js/list.min.js +105,{0} is not set,{0} لم يتم تحديد apps/frappe/frappe/permissions.py +168,Not allowed to access {0} with {1} = {2},لا يسمح للوصول إلى {0} مع {1} {2} = apps/frappe/frappe/templates/emails/print_link.html +2,View this in your browser,عرض هذا في متصفحك DocType: DocType,Search Fields,البحث الحقول @@ -476,7 +476,7 @@ DocType: Workflow State,align-justify,محاذاة-تبرير DocType: User,Middle Name (Optional),الاسم الأوسط (اختياري) sites/assets/js/desk.min.js +519,No Results,لا نتائج DocType: System Settings,Security,أمن -DocType: Currency,**Currency** Master,** ** العملات ماستر +DocType: Currency,**Currency** Master,سجل **العملات** DocType: Website Settings,Address and other legal information you may want to put in the footer.,العنوان وغيرها من المعلومات القانونية قد تحتاج لوضع في تذييل الصفحة. sites/assets/js/list.min.js +102,Starred By Me,تألق من خلال البيانات apps/frappe/frappe/core/page/permission_manager/permission_manager.js +48,Select Document Type,حدد نوع الوثيقة @@ -486,7 +486,7 @@ apps/frappe/frappe/desk/doctype/event/event.py +24,Every day events should finis DocType: Communication,User Tags,الكلمات المستخدم DocType: Workflow State,download-alt,تحميل بديل DocType: Web Page,Main Section,القسم العام -apps/frappe/frappe/core/doctype/doctype/doctype.py +226,{0} not allowed in fieldname {1},{0} غير مسموح به في fieldname {1} +apps/frappe/frappe/core/doctype/doctype/doctype.py +226,{0} not allowed in fieldname {1},{0} غير مسموح به في الحقل المسمى {1} DocType: Page,Icon,رمز DocType: Web Page,Content in markdown format that appears on the main side of your page,المحتوى في شكل تخفيض السعر الذي يظهر على الجانب الرئيسي من الصفحة الخاصة بك DocType: System Settings,dd/mm/yyyy,اليوم / الشهر / السنة @@ -553,7 +553,7 @@ apps/frappe/frappe/utils/csvutils.py +74,Not a valid Comma Separated Value (CSV DocType: Email Account,Default Incoming,افتراضي واردة DocType: Workflow State,repeat,كرر DocType: Website Settings,Banner,راية -sites/assets/js/desk.min.js +822,Help on Search,تساعد على البحث +sites/assets/js/desk.min.js +822,Help on Search,دليل البحث DocType: User,Uncheck modules to hide from user's desktop,وحدات ازل للاختباء من سطح المكتب المستخدم DocType: DocType,Hide Copy,إخفاء نسخة apps/frappe/frappe/core/doctype/user/user.js +168,Clear all roles,مسح كافة الأدوار @@ -599,7 +599,7 @@ sites/assets/js/desk.min.js +463,Please save the document before uploading.,ال apps/frappe/frappe/core/doctype/doctype/doctype.py +292,Fold must come before a Section Break,أضعاف يجب أن يأتي قبل استراحة القسم apps/frappe/frappe/core/doctype/user/user.py +374,Not allowed to reset the password of {0},لا يسمح ل إعادة تعيين كلمة المرور من {0} DocType: Workflow State,hand-down,إلى أسفل اليد -apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0} : لا يمكن تعيين الغاء دون إرسال +apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0} : لا يمكن تحديد الغاء دون تأكيد DocType: Website Theme,Theme,موضوع DocType: DocType,Is Submittable,هو Submittable apps/frappe/frappe/custom/doctype/property_setter/property_setter.js +7,Value for a check field can be either 0 or 1,قيمة لحقل الاختيار يمكن أن يكون إما 0 أو 1 @@ -625,7 +625,7 @@ DocType: Website Settings,Disable Signup,تعطيل الاشتراك apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +7,Roles can be set for users from their User page.,الأدوار يمكن تعيين للمستخدمين من صفحة المستخدم الخاصة بهم. apps/frappe/frappe/website/doctype/web_page/web_page.py +158,Website Search,البحث في الموقع DocType: DocField,Mandatory,إلزامي -apps/frappe/frappe/core/doctype/doctype/doctype.py +356,{0}: No basic permissions set,{0} : لا تعيين أذونات الأساسية +apps/frappe/frappe/core/doctype/doctype/doctype.py +356,{0}: No basic permissions set,{0} : لم يتم تحديد صلاحيات أساسية apps/frappe/frappe/utils/backups.py +140,Download link for your backup will be emailed on the following email address: {0},سوف تكون عبر البريد الالكتروني رابط التحميل للنسخ الاحتياطي الخاص بك على عنوان البريد الإلكتروني التالي: {0} apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +14,"Meaning of Submit, Cancel, Amend",معنى تقديم، إلغاء وتعديل apps/frappe/frappe/desk/doctype/todo/todo_list.js +7,To Do,قائمة المهام @@ -655,7 +655,7 @@ DocType: Event,Repeat this Event,كرر هذا الحدث DocType: DocPerm,Amend,تعديل apps/frappe/frappe/templates/includes/login/login.js +43,Valid Login id required.,صالحة معرف تسجيل الدخول المطلوبة. apps/frappe/frappe/desk/doctype/todo/todo.js +30,Re-open,إعادة فتح -apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} هذه الوثيقة مع تقاسم الامم المتحدة {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} الغى مشاركة هذه الوثيقة مع {1} apps/frappe/frappe/templates/emails/auto_reply.html +4,This is an automatically generated reply,هذا هو الرد تتولد تلقائيا apps/frappe/frappe/model/document.py +376,Record does not exist,سجل غير موجود apps/frappe/frappe/templates/pages/404.html +4,Page missing or moved,الصفحة المفقودة أو نقلها @@ -692,14 +692,13 @@ DocType: Workflow State,fast-backward,سريع إلى الوراء DocType: DocShare,DocShare,DocShare DocType: Report,Add Total Row,إضافة صف الإجمالي apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +19,For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment.,على سبيل المثال إذا قمت بإلغاء وتعديل INV004 أنها سوف تصبح وثيقة INV004-1 جديدة. هذا يساعدك على تتبع كل تعديل. -DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - مشروع؛ 1 - المقدمة؛ 2 - إلغاء +DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - مسودّة؛ 1 - تأكيد؛ 2 - إلغاء apps/frappe/frappe/core/page/modules_setup/modules_setup.js +5,Show or Hide Modules,إظهار أو إخفاء الوحدات DocType: File Data,Attached To DocType,تعلق على DOCTYPE apps/frappe/frappe/desk/page/activity/activity.js +153,Aug,أغسطس DocType: DocField,Int,الباحث DocType: Currency,"1 Currency = [?] Fraction -For e.g. 1 USD = 100 Cent","1 العملة = [؟] جزء - على سبيل المثال 1 USD = 100 سنت" +For e.g. 1 USD = 100 Cent",وحدة واحدة من العملة = ؟ أجزاء صغيرة من العملة. على سبيل المثال : 1 ريال سعودي = 100 هللة. apps/frappe/frappe/core/page/permission_manager/permission_manager.js +363,Add New Permission Rule,إضافة قاعدة جديدة إذن sites/assets/js/desk.min.js +512,You can use wildcard %,يمكنك استخدام حرف البدل٪ apps/frappe/frappe/desk/page/activity/activity.js +152,Mar,شوه @@ -751,7 +750,7 @@ apps/frappe/frappe/model/base_document.py +394,Row #{0}:,الصف # {0}: apps/frappe/frappe/core/doctype/user/user.py +80,New password emailed,كلمة مرور جديدة عبر البريد الالكتروني apps/frappe/frappe/auth.py +198,Login not allowed at this time,الدخول غير مسموح به في هذا الوقت DocType: DocType,Permissions Settings,أذونات إعدادات -sites/assets/js/desk.min.js +836,{0} List,{0} قائمة +sites/assets/js/desk.min.js +836,{0} List,قائمة {0} apps/frappe/frappe/desk/form/assign_to.py +39,Already in user's To Do list,بالفعل في المستخدم والقيام قائمة DocType: Email Account,Enable Outgoing,تمكين المنتهية ولايته DocType: DocField,Text,نص @@ -817,7 +816,7 @@ DocType: Workflow State,Style,أسلوب apps/frappe/frappe/website/doctype/blog_post/blog_post.py +166,{0} comments,{0} تعليقات DocType: Customize Form Field,Label and Type,التسمية و النوع DocType: Workflow State,forward,إلى الأمام -sites/assets/js/form.min.js +270,{0} edited this {1},{0} تحرير هذا {1} +sites/assets/js/form.min.js +270,{0} edited this {1},{0} حرر هذا {1} DocType: Web Page,Custom Javascript,جافا سكريبت مخصصة DocType: DocPerm,Submit,عرض DocType: Website Settings,Sub-domain provided by erpnext.com,النطاق الفرعي المقدمة من erpnext.com @@ -851,7 +850,7 @@ apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,ديسمبر DocType: Event,Leave blank to repeat always,اتركه فارغا لتكرار دائما DocType: Event,Ends on,ينتهي في apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,البند لا يمكن أن تضاف إلى أحفاد الخاصة -sites/assets/js/form.min.js +270,{0} created this {1},{0} خلق هذا {1} +sites/assets/js/form.min.js +270,{0} created this {1},{0} أنشأ {1} apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.",مهمة {0}، الذي قمت بتعيينه إلى {1}، تم إغلاق بواسطة {2}. DocType: Blogger,Short Name,الاسم المختصر DocType: Workflow State,magnet,مغناطيس @@ -947,7 +946,7 @@ apps/frappe/frappe/model/document.py +425,Cannot edit cancelled document,لا ت apps/frappe/frappe/utils/nestedset.py +77,Nested set error. Please contact the Administrator.,خطأ مجموعة متداخلة . يرجى الاتصال مدير البرنامج. apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +11,,<الطبقة = تمتد-كتم النص بيانات-لا-المحتوى = 1> DocType: Workflow State,envelope,مغلف -apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} المشتركة هذه الوثيقة مع {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} مشاركة هذه الوثيقة مع {1} DocType: Website Settings,Google Plus One,جوجل زائد واحد apps/frappe/frappe/desk/page/activity/activity.js +153,Jul,يوليو DocType: Communication,Additional Info,معلومات إضافية @@ -1064,7 +1063,7 @@ DocType: Workflow Transition,Action,حدث apps/frappe/frappe/core/page/data_import_tool/exporter.py +221,Info:,معلومات: DocType: Custom Field,Permission Level,إذن المستوى DocType: User,Send Notifications for Transactions I Follow,إرسال الإخطارات عن المعاملات أنا اتبع -apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write",{0} : لا يمكن تعيين إرسال ، الغاء ، تعديل دون كتابة +apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write",{0} : لا يمكن تحديد تأكيد ، الغاء ، تعديل دون كتابة apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,الإعداد > العضو apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,شكرا sites/assets/js/form.min.js +180,Saving,إنقاذ @@ -1098,12 +1097,12 @@ DocType: DocField,Attach,إرفاق DocType: DocType,Permission Rules,إذن قوانين sites/assets/js/form.min.js +157,Links,الروابط apps/frappe/frappe/model/base_document.py +322,Value missing for,قيمة مفقودة لل -apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}: لا يمكن حذف سجل نشره. +apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}: لا يمكن حذف سجل مؤكد. DocType: DocPerm,Read,قرأ apps/frappe/frappe/templates/pages/update-password.html +18,Old Password,كلمة المرور القديمة apps/frappe/frappe/website/doctype/blog_post/blog_post.py +97,Posts by {0},مشاركات {0} apps/frappe/frappe/core/doctype/report/report.js +9,"To format columns, give column labels in the query.",لتنسيق الأعمدة، وإعطاء تسميات الأعمدة في الاستعلام. -apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0} : لا يمكن تعيين تعيين يعدل إن لم يكن Submittable +apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0} : لا يمكن تحديد تعيين بالتعديل إن لم يكن قابل للتأكيد apps/frappe/frappe/core/page/user_permissions/user_permissions.js +14,Edit Role Permissions,ضوابط تحرير دور DocType: Social Login Keys,Social Login Keys,دخول الاجتماعية كيز DocType: Comment,Comment Date,التعليق تاريخ @@ -1267,12 +1266,12 @@ apps/frappe/frappe/config/setup.py +147,Customized HTML Templates for printing t apps/frappe/frappe/desk/form/utils.py +103,No further records,لا توجد سجلات أخرى DocType: DocField,Long Text,نص طويل apps/frappe/frappe/core/page/data_import_tool/importer.py +35,Please do not change the rows above {0},من فضلك لا تغيير الصفوف أعلاه {0} -sites/assets/js/desk.min.js +852,(Ctrl + G),(السيطرة + G) +sites/assets/js/desk.min.js +852,(Ctrl + G),(كنترول + G) sites/assets/js/desk.min.js +808,Sorry! You are not permitted to view this page.,آسف! غير مسموح لك لعرض هذه الصفحة. DocType: Workflow State,bell,جرس sites/assets/js/form.min.js +282,Share this document with,مشاركة هذه الوثيقة مع apps/frappe/frappe/desk/page/activity/activity.js +152,Jun,يونيو -apps/frappe/frappe/utils/nestedset.py +227,{0} {1} cannot be a leaf node as it has children,{0} {1} لا يمكن أن يكون عقدة ورقة كما فعلت الأطفال +apps/frappe/frappe/utils/nestedset.py +227,{0} {1} cannot be a leaf node as it has children,{0} {1} لا يمكن أن يكون تفريعة لأن لديه تفريعات أخرى DocType: Feed,Info,معلومات apps/frappe/frappe/templates/includes/contact.js +30,Thank you for your message,شكرا لرسالتك DocType: Website Settings,Home Page,الصفحة الرئيسية @@ -1301,7 +1300,7 @@ DocType: DocField,Print Width,طباعة العرض DocType: User,Allow user to login only before this hour (0-24),تسمح للمستخدم لتسجيل الدخول فقط قبل هذه الساعة (0-24) apps/frappe/frappe/print/page/print_format_builder/print_format_builder_sidebar.html +3,Filter...,تصفية ... DocType: Workflow State,bold,جريء -apps/frappe/frappe/website/doctype/website_settings/website_settings.py +34,{0} does not exist in row {1},{0} غير موجود في الصف {1} +apps/frappe/frappe/website/doctype/website_settings/website_settings.py +34,{0} does not exist in row {1},{0} غير موجود في السجل {1} DocType: Event,Event Type,نوع الحدث DocType: User,Last Known Versions,المعروفة إصدارات مشاركة apps/frappe/frappe/config/setup.py +115,Add / Manage Email Accounts.,إضافة / إدارة حسابات البريد الإلكتروني. @@ -1352,7 +1351,7 @@ DocType: Print Settings,Send Print as PDF,إرسال طباعة بصيغة PDF DocType: Workflow Transition,Allowed,سمح apps/frappe/frappe/core/doctype/doctype/doctype.py +287,There can be only one Fold in a form,يمكن أن يكون هناك واحد فقط طية في شكل apps/frappe/frappe/website/doctype/website_settings/website_settings.py +23,Invalid Home Page,الصفحة الرئيسية غير صالحة -apps/frappe/frappe/core/doctype/doctype/doctype.py +378,{0}: Permission at level 0 must be set before higher levels are set,{0} : إذن على مستوى 0 يجب تعيين قبل أن يتم تحديد مستويات أعلى +apps/frappe/frappe/core/doctype/doctype/doctype.py +378,{0}: Permission at level 0 must be set before higher levels are set,{0} : صلاحيات على مستوى 0 يجب تحديده قبل أن يتم تحديد صلاحيات أعلى DocType: Website Settings,Home Page is Products,الصفحة الرئيسية المنتجات غير apps/frappe/frappe/desk/doctype/todo/todo.py +21,Assignment closed by {0},احالة مغلقة من قبل {0} sites/assets/js/desk.min.js +831,Calculate,إحسب @@ -1410,7 +1409,7 @@ DocType: Email Alert,Save,حفظ DocType: Website Settings,Title Prefix,عنوان الاختصار DocType: Email Account,Notifications and bulk mails will be sent from this outgoing server.,سيتم إرسال إخطارات ورسائل السائبة من هذا الخادم المنتهية ولايته. DocType: Workflow State,cog,تحكم في -sites/assets/js/desk.min.js +522,{0} added,{0} أضاف +sites/assets/js/desk.min.js +522,{0} added,{0} أضيف sites/assets/js/list.min.js +65,Not In,ليس في DocType: Workflow State,star,نجم apps/frappe/frappe/desk/page/activity/activity.js +153,Nov,نوفمبر @@ -1420,7 +1419,7 @@ apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +9, apps/frappe/frappe/templates/includes/login/login.js +120,Oops! Something went wrong,عفوًا! ذهب شيئا خاطئا DocType: Blog Settings,Blog Introduction,بلوق مقدمة DocType: User,Email Settings,إعدادات البريد الإلكتروني -apps/frappe/frappe/workflow/doctype/workflow/workflow.py +57,{0} not a valid State,{0} يست دولة صالحة +apps/frappe/frappe/workflow/doctype/workflow/workflow.py +57,{0} not a valid State,{0} ليست حالة صالحة DocType: Workflow State,ok-circle,دائرة OK- apps/frappe/frappe/core/doctype/user/user.py +101,Sorry! User should have complete access to their own record.,آسف! وينبغي أن يكون المستخدم الوصول الكامل إلى سجل الخاصة بهم. DocType: Custom Field,In Report Filter,في تصفية التقرير @@ -1468,6 +1467,6 @@ apps/frappe/frappe/core/page/data_import_tool/importer.py +40,No data found,لا DocType: Web Form,Allow Comments,سماح تعليقات DocType: User,Background Style,خلفية ستايل DocType: System Settings,mm-dd-yyyy,MM-DD-YYYY -apps/frappe/frappe/desk/doctype/feed/feed.py +91,{0} logged in,{0} بتسجيل الدخول +apps/frappe/frappe/desk/doctype/feed/feed.py +91,{0} logged in,{0} تم تسجيل الدخول apps/frappe/frappe/templates/emails/new_user.html +4,Your login id is,معرف تسجيل الدخول الخاص بك هو DocType: DocField,Ignore User Permissions,تجاهل أذونات المستخدم diff --git a/frappe/translations/es.csv b/frappe/translations/es.csv index 6a8d4994f4..2bf1d21b08 100644 --- a/frappe/translations/es.csv +++ b/frappe/translations/es.csv @@ -1,5 +1,5 @@ apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +224,Press Esc to close,Presiona Esc para cerrar -apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}","Una nueva tarea, {0}, se ha asignado a usted por {1}. {2}" +apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}","Una nueva tarea, {0}, le ha sido asignada por {1}. {2}" apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,Publicar apps/frappe/frappe/config/setup.py +98,Rename many items by uploading a .csv file.,Cambiar el nombre de muchos artículos mediante la subida de un archivo csv . . DocType: Workflow State,pause,pausa @@ -37,9 +37,9 @@ sites/assets/js/desk.min.js +708,Export not allowed. You need {0} role to export apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +154,Set the display label for the field,Ajuste la etiqueta de visualización para el campo apps/frappe/frappe/model/document.py +655,Incorrect value: {0} must be {1} {2},Valor incorrecto: {0} debe ser {1} {2} apps/frappe/frappe/config/setup.py +179,"Change field properties (hide, readonly, permission etc.)","Cambiar las propiedades de campo (ocultar , de sólo lectura , permisos , etc )" -DocType: Workflow State,lock,cerrar +DocType: Workflow State,lock,bloquear apps/frappe/frappe/config/website.py +74,Settings for Contact Us Page.,Ajustes para la página de contacto. -apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,Administrador de sesión +apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,Administrador logeado DocType: Contact Us Settings,"Contact options, like ""Sales Query, Support Query"" etc each on a new line or separated by commas.","Opciones de contacto , como "" Consultas de Ventas , Soporte de consultas"" , etc cada uno en una nueva línea o separados por comas." sites/assets/js/editor.min.js +155,Insert,Insertar sites/assets/js/desk.min.js +512,Select {0},Seleccione {0} @@ -75,7 +75,7 @@ sites/assets/js/desk.min.js +649,You,Usted DocType: Website Theme,lowercase,minúsculas DocType: Note,Everyone can read,Todo el mundo puede leer apps/frappe/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py +25,Please specify user,"Por favor, especifique el usuario" -DocType: Email Unsubscribe,Email Unsubscribe,Correo electrónico Cancelar la suscripción +DocType: Email Unsubscribe,Email Unsubscribe,Cancelar Suscripción por Correo Electrónico DocType: Website Settings,Select an image of approx width 150px with a transparent background for best results.,Seleccione una imagen de ancho aprox 150px con fondo transparente para obtener mejores resultados . apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +61,"Insert After field '{0}' mentioned in Custom Field '{1}', does not exist","Inserte Después campo '{0}' se ha mencionado en el Campo Personalizado ' {1}' , no existe" DocType: Workflow State,circle-arrow-up,circle-arrow -up @@ -100,7 +100,7 @@ DocType: Workflow State,chevron-up,chevron -up sites/assets/js/desk.min.js +852,Documentation,Documentación DocType: DocShare,Internal record of document shares,Registro interno de documentos acciones DocType: Workflow State,Comment,Comentario -apps/frappe/frappe/email/bulk.py +120,Email limit {0} crossed,Email límite de {0} cruzó +apps/frappe/frappe/email/bulk.py +120,Email limit {0} crossed,Limite de correos electrónicos {0} rebasado apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +17,"You can change Submitted documents by cancelling them and then, amending them.","Puede cambiar los documentos Enviados cancelándolos y luego, haciendo los cambios pertinentes." DocType: DocField,Display,Visualización sites/assets/js/desk.min.js +832,e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)..., ejemplo (55 + 434) / 4 o = Math.sin (Mat.PI / 2) ... @@ -146,7 +146,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.ht DocType: Website Settings,Add a banner to the site. (small banners are usually good),Añadir un banner al sitio. (banners pequeños son mejores generalmente) DocType: Website Settings,Set Banner from Image,Establecer Banner de imagen apps/frappe/frappe/core/doctype/user/user.py +202,User {0} cannot be deleted,El usuario {0} no se puede eliminar -sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,"Otra transacción está bloqueando éste. Por favor, inténtelo de nuevo en unos pocos segundos." +sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,"Otra transacción está bloqueando esta. Por favor, inténtelo de nuevo en unos pocos segundos." DocType: Property Setter,Field Name,Nombre del campo sites/assets/js/desk.min.js +684,or,o apps/frappe/frappe/templates/generators/web_form.html +265,Continue,Continuar @@ -203,7 +203,7 @@ apps/frappe/frappe/utils/file_manager.py +83,No file attached,No hay archivos ad DocType: Version,Version,Versión DocType: User,Fill Screen,Rellenar Pantalla apps/frappe/frappe/core/doctype/role/role.js +9,Edit Permissions,Editar permisos -sites/assets/js/form.min.js +210,Edit via Upload,Editar través Subir +sites/assets/js/form.min.js +210,Edit via Upload,Editar vía Subir Archivo DocType: Country,Country Name,Nombre del país DocType: About Us Team Member,About Us Team Member,Miembro del Equipo Acerca de Nosotros apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +5,"Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions.","Los permisos se establecen en las Funciones y Tipos de Documentos (llamados DocTypes ) mediante el establecimiento de permisos como Leer, Escribir , Crear, Eliminar , Enviar, Cancelar, Corregir, Informe , Importación, Exportación, Impresión , Correo Electrónico y Establecer Permisos de Usuario ." @@ -221,7 +221,7 @@ DocType: Print Settings,Font Size,Tamaño de la Fuente sites/assets/js/desk.min.js +852,Unread Messages,Mensajes no leídos DocType: Workflow State,facetime-video,FaceTime y vídeo apps/frappe/frappe/website/doctype/blog_post/blog_post.py +164,1 comment,1 comentario -DocType: Email Alert,Days Before,Días antes +DocType: Email Alert,Days Before,Días Antes apps/frappe/frappe/website/doctype/website_settings/website_settings.js +72,Select a Banner Image first.,Seleccione una imagen de encabezado primero . DocType: Workflow State,volume-down,volumen hacia abajo DocType: Email Account,Send Notification to,Enviar Notificación a @@ -236,7 +236,7 @@ DocType: Workflow State,zoom-in,Acercar apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,Salir de esta lista apps/frappe/frappe/desk/page/activity/activity.js +153,Sep,Septiembre DocType: DocField,Width,Ancho -DocType: Email Account,Notify if unreplied,Notificar si UNREPLIED +DocType: Email Account,Notify if unreplied,Notificar si no tiene respuesta DocType: DocType,Fields,Los campos apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +15,Parent Table,Tabla de Padres apps/frappe/frappe/website/doctype/website_settings/website_settings.py +38,{0} in row {1} cannot have both URL and child items,{0} en la fila {1} no se puede tener ambas cosas URL y elementos secundarios @@ -291,7 +291,7 @@ DocType: Bulk Email,Bulk Email,"Correo Masivo " DocType: Workflow,Rules defining transition of state in the workflow.,Reglas que definen la transición de estado del flujo de trabajo . DocType: DocField,Index,Índice -sites/assets/js/editor.min.js +107,Number list,Lista de números +sites/assets/js/editor.min.js +107,Number list,Lista de Números apps/frappe/frappe/desk/page/messages/messages_sidebar.html +9,Everyone,Todos DocType: Workflow State,backward,hacia atrás apps/frappe/frappe/config/setup.py +79,Set numbering series for transactions.,Establecer series de numeración para las transacciones. @@ -395,7 +395,7 @@ DocType: Print Format,Print Format Type,Tipo de formato de impresión sites/assets/js/desk.min.js +841,Open Source Applications for the Web,Aplicaciones de código abierto para la Web DocType: DocType,Hide Toolbar,Ocultar barra de herramientas DocType: Email Account,SMTP Settings for outgoing emails,Configuración SMTP para los correos salientes -apps/frappe/frappe/core/page/data_import_tool/data_import_tool.js +116,Import Failed,Error al importar +apps/frappe/frappe/core/page/data_import_tool/data_import_tool.js +116,Import Failed,Error al Importar apps/frappe/frappe/templates/emails/password_update.html +3,Your password has been updated. Here is your new password,Su contraseña se ha actualizado. Aquí está tu nueva contraseña DocType: Email Account,Auto Reply Message,Mensaje de repuesta automática DocType: Email Alert,Condition,Condición @@ -450,7 +450,7 @@ For Select, enter list of Options, each on a new line.","Para Links, introduzca DocType: Workflow State,film,película apps/frappe/frappe/model/db_query.py +286,No permission to read {0},No tiene permiso para leer {0} apps/frappe/frappe/utils/nestedset.py +221,Multiple root nodes not allowed.,Nodos raíz múltiples no permitidos. -sites/assets/js/desk.min.js +603,Get,Conseguir +sites/assets/js/desk.min.js +603,Get,Obtener apps/frappe/frappe/custom/doctype/custom_field/custom_field.js +55,Options for select. Each option on a new line. e.g.:
    Option 1
    Option 2
    Option 3
    ,Opciones para la selecta. Cada opción en una línea nueva. por ejemplo:
    Opción 1 Opción 2 Foto
    Opción 3
    sites/assets/js/desk.min.js +125,Confirm,Confirmar DocType: System Settings,yyyy-mm-dd,aaaa-mm-dd @@ -509,14 +509,14 @@ apps/frappe/frappe/config/setup.py +185,Add fields to forms.,Agregar campos a lo apps/frappe/frappe/templates/pages/me.py +14,You need to be logged in to access this page.,Tienes que estar registrado para acceder a esta página. DocType: Workflow State,leaf,hoja apps/frappe/frappe/config/desktop.py +60,Installer,Instalador -sites/assets/js/editor.min.js +113,Insert Link,Insertar enlace +sites/assets/js/editor.min.js +113,Insert Link,Insertar Enlace DocType: Contact Us Settings,Query Options,Opciones de consulta DocType: Patch Log,Patch Log,Registro de Parches DocType: Communication,Sent or Received,Envío y de recepción DocType: DefaultValue,Key,Clave apps/frappe/frappe/config/setup.py +54,Report of all document shares,Informe de todas las acciones de documentos sites/assets/js/desk.min.js +536,Starred By,Protagonizada por -apps/frappe/frappe/templates/pages/update-password.html +22,New Password,Nueva contraseña +apps/frappe/frappe/templates/pages/update-password.html +22,New Password,Nueva Contraseña DocType: Website Theme,Style using CSS,Estilo con CSS DocType: Communication,Reference DocType,Referencia DocType DocType: User,System User,Usuario del Sistema @@ -524,7 +524,7 @@ DocType: Report,Is Standard,Es Estándar apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +218,Specify a default value,Especifique un valor predeterminado DocType: Website Settings,FavIcon,FavIcon DocType: Workflow State,minus-sign,signo menos -sites/assets/js/desk.min.js +182,Not Found,No encontrado +sites/assets/js/desk.min.js +182,Not Found,No Encontrado apps/frappe/frappe/templates/pages/print.py +127,No {0} permission,No {0} permiso DocType: Feed,Login,Iniciar Sesión DocType: System Settings,Enable Scheduled Jobs,Habilitar tareas programadas @@ -608,7 +608,7 @@ apps/frappe/frappe/model/document.py +475,Could not find {0},No se pudo encontra apps/frappe/frappe/core/page/data_import_tool/exporter.py +217,Column Labels:,Etiquetas de columna: apps/frappe/frappe/model/naming.py +62,Naming Series mandatory,Nombrar Series obligatoria DocType: Social Login Keys,Facebook Client ID,Facebook Client ID -DocType: Workflow State,Inbox,Bandeja de entrada +DocType: Workflow State,Inbox,Bandeja de Entrada DocType: Workflow State,Tag,Etiqueta DocType: Custom Script,Script,Guión sites/assets/js/desk.min.js +852,My Settings,Mi Configuración @@ -619,7 +619,7 @@ apps/frappe/frappe/core/doctype/system_settings/system_settings.py +17,Session E DocType: Top Bar Item,"Select target = ""_blank"" to open in a new page.","Select target = "" _blank"" para abrir en una nueva página." sites/assets/js/desk.min.js +555,Permanently delete {0}?,Eliminar permanentemente {0} ? apps/frappe/frappe/core/doctype/file_data/file_data.py +33,Same file has already been attached to the record,El mismo archivo ya se ha adjuntado al registro -apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +59,Ignore encoding errors.,No haga caso de la codificación errores. +apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +59,Ignore encoding errors.,Ignorar errores de codificación. DocType: Workflow State,wrench,llave inglesa apps/frappe/frappe/templates/emails/auto_reply.html +2,"Your query has been received. We will back reply shortly. If you have any additional information, please reply to this mail.","Su petición ha sido recibida. Vamos a responder a la brevedad. Si usted tiene alguna información adicional, por favor responda a este correo." DocType: Website Settings,Disable Signup,Deshabilitar Registro @@ -645,7 +645,7 @@ DocType: Workflow State,thumbs-up,pulgar hacia arriba sites/assets/js/desk.min.js +870,Add Reply,Añadir Respuesta DocType: DocPerm,DocPerm,DocPerm apps/frappe/frappe/core/doctype/doctype/doctype.py +273,Precision should be between 1 and 6,Precisión debe estar entre 1 y 6 -DocType: About Us Team Member,Image Link,Enlace a la imagen +DocType: About Us Team Member,Image Link,Enlace a la Imagen DocType: Workflow State,step-backward,paso hacia atrás apps/frappe/frappe/utils/boilerplate.py +228,{app_title},{ app_title } apps/frappe/frappe/core/page/data_import_tool/exporter.py +65,Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,"Sólo los campos obligatorios son necesarios para los nuevos registros. Puede eliminar columnas de carácter no obligatorio, si lo desea." @@ -668,7 +668,7 @@ apps/frappe/frappe/utils/file_manager.py +181,File size exceeded the maximum all apps/frappe/frappe/core/doctype/doctype/doctype.py +344,Enter at least one permission row,Introduzca al menos una fila permiso sites/assets/js/desk.min.js +536,Created On,Creado el DocType: Workflow State,align-center,align - centrado -sites/assets/js/form.min.js +282,Can Write,Puede escribir +sites/assets/js/form.min.js +282,Can Write,Puede Escribir apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +16,"Certain documents, like an Invoice, should not be changed once final. The final state for such documents is called Submitted. You can restrict which roles can Submit.","Algunos documentos , como una Factura , no se deben cambiar una vez finalizados. El estado final de dichos documentos se llama Presentado . Puede restringir qué roles pueden Presentar Documentos" DocType: Communication,Sender,Remitente DocType: Web Page,Description for search engine optimization.,Descripción para la optimización de motores de búsqueda. @@ -724,7 +724,7 @@ apps/frappe/frappe/templates/emails/new_user.html +3,A new account has been crea apps/frappe/frappe/templates/emails/password_update.html +1,Password Update Notification,Notificación de Actualización de Contraseña DocType: DocPerm,User Permission DocTypes,Doctypes de Permisos de Usuarios sites/assets/js/desk.min.js +555,New Name,Nuevo Nombre -sites/assets/js/form.min.js +196,Insert Above,Inserte encima +sites/assets/js/form.min.js +196,Insert Above,Inserte Encima sites/assets/js/list.min.js +21,Not Saved,No Guardado apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Permitir usuario Si DocType: Custom Field,Default Value,Valor predeterminado @@ -769,7 +769,7 @@ DocType: Report,Report Builder,Generador de informes DocType: Workflow,Workflow,Flujo de Trabajo DocType: Workflow State,Upload,Subir DocType: System Settings,Date Format,Formato de la fecha -apps/frappe/frappe/website/doctype/blog_post/blog_post_list.js +7,Not Published,No publicado +apps/frappe/frappe/website/doctype/blog_post/blog_post_list.js +7,Not Published,No Publicado apps/frappe/frappe/config/setup.py +168,"Actions for workflow (e.g. Approve, Cancel).","Acciones para el flujo de trabajo (por ejemplo, Aprobar, Cancelar)." DocType: Workflow State,flag,bandera DocType: Web Page,Text Align,Alineación del texto @@ -818,7 +818,7 @@ DocType: Workflow State,Style,Estilo apps/frappe/frappe/website/doctype/blog_post/blog_post.py +166,{0} comments,{0} comentarios DocType: Customize Form Field,Label and Type,Etiqueta y Tipo DocType: Workflow State,forward,adelante -sites/assets/js/form.min.js +270,{0} edited this {1},{0} editado este {1} +sites/assets/js/form.min.js +270,{0} edited this {1},{0} editado {1} DocType: Web Page,Custom Javascript,Javascript Personalizado DocType: DocPerm,Submit,Presentar DocType: Website Settings,Sub-domain provided by erpnext.com,Sub - dominio proporcionado por erpnext.com @@ -841,7 +841,7 @@ apps/frappe/frappe/core/page/modules_setup/modules_setup.js +55,There were error apps/frappe/frappe/desk/doctype/todo/todo.js +22,Close,Cerrar apps/frappe/frappe/model/document.py +412,Cannot change docstatus from 0 to 2,No se puede cambiar DocStatus de 0 a 2 apps/frappe/frappe/core/doctype/doctype/doctype.py +244,Options must be a valid DocType for field {0} in row {1},Las opciones deben ser un tipo de documento válido para el campo {0} en la fila {1} -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +159,Edit Properties,Editar propiedades +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +159,Edit Properties,Editar Propiedades DocType: Patch Log,List of patches executed,Lista de parches ejecutado DocType: Communication,Communication Medium,Medio de Comunicación DocType: Website Settings,Banner HTML,Banner HTML @@ -851,8 +851,8 @@ DocType: Workflow State,trash,Basura apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,Diciembre DocType: Event,Leave blank to repeat always,Dejar en blanco para repetir siempre DocType: Event,Ends on,Finaliza el -apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,El artículo no se puede añadir a sus propios descendientes -sites/assets/js/form.min.js +270,{0} created this {1},{0} creado este {1} +apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,El Artículo no se puede añadir a sus propios descendientes +sites/assets/js/form.min.js +270,{0} created this {1},{0} creado {1} apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.","La tarea {0}, que asignó a {1}, ha sido cerrado por {2}." DocType: Blogger,Short Name,Nombre corto DocType: Workflow State,magnet,imán @@ -898,7 +898,7 @@ sites/assets/js/desk.min.js +536,Document Status,Estado del documento apps/frappe/frappe/core/page/data_import_tool/importer.py +175,Not allowed to Import,Sin permiso para importar apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +22,Permission Levels,Niveles de permisos DocType: Workflow State,Warning,Advertencia -DocType: DocType,In Dialog,En diálogo +DocType: DocType,In Dialog,En Diálogo apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +142,Help,Ayuda DocType: User,Login Before,Iniciar antes DocType: Web Page,Insert Style,Inserte Estilo @@ -912,7 +912,7 @@ sites/assets/js/desk.min.js +522,Added {0} ({1}),Añadido: {0} ({1}) apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +253,Fieldtype cannot be changed from {0} to {1} in row {2},Tipo de campo no puede ser cambiado de {0} a {1} en fila {2} apps/frappe/frappe/core/doctype/doctype/doctype.py +304,Search Fields should contain valid fieldnames,Campos de búsqueda deben contener nombres de campo válidos apps/frappe/frappe/core/doctype/user/user.js +323,Role Permissions,Permisos de la Función -sites/assets/js/form.min.js +282,Can Read,Se puede leer +sites/assets/js/form.min.js +282,Can Read,Puede Leer DocType: Standard Reply,Response,Respuesta sites/assets/js/form.min.js +282,Can Share,Puede compartir apps/frappe/frappe/email/smtp.py +37,Invalid recipient address,Dirección de destinatario no válido @@ -988,7 +988,7 @@ DocType: Blog Post,Email Sent,Correo electrónico enviado sites/assets/js/desk.min.js +870,Send As Email,Enviar como correo electrónico DocType: Website Theme,Link Color,Enlace color apps/frappe/frappe/core/doctype/user/user.py +47,User {0} cannot be disabled,El usuario {0} no se puede deshabilitar -apps/frappe/frappe/core/doctype/user/user.py +470,"Dear System Manager,","Estimado Administrador del sistema," +apps/frappe/frappe/core/doctype/user/user.py +470,"Dear System Manager,","Estimado Administrador del Sistema," apps/frappe/frappe/config/setup.py +214,Download Backup,Descargar Copia de Seguridad sites/assets/js/form.min.js +180,Amending,Rectificativo sites/assets/js/desk.min.js +512,Dialog box to select a Link Value,Cuadro de Diálogo para seleccionar un Valor Vinculado @@ -1003,7 +1003,7 @@ DocType: DocField,Table,Tabla DocType: File Data,File Size,Tamaño del archivo apps/frappe/frappe/website/doctype/web_form/web_form.py +87,You must login to submit this form,Debes iniciar sesión para enviar este formulario DocType: User,Background Image,Imagen de Fondo -sites/assets/js/form.min.js +261,New Custom Print Format,Nuevo formato personalizado Imprimir +sites/assets/js/form.min.js +261,New Custom Print Format,Nuevo formato de impresión personalizado DocType: DocPerm,Create,Crear DocType: About Us Settings,Org History,Historia de la Organización DocType: Workflow,Workflow Name,Nombre de flujo @@ -1068,11 +1068,11 @@ DocType: User,Send Notifications for Transactions I Follow,Enviar notificaciones apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write","{0}: no se puede establecer en Enviar, Cancelar, Corregir sin Escribir" apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,Configuración> Usuario apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,Gracias -sites/assets/js/form.min.js +180,Saving,Ahorro +sites/assets/js/form.min.js +180,Saving,Guardando DocType: Print Settings,Print Style Preview,Vista previa de Estilo de impresión DocType: About Us Settings,About Us Settings,Configuración de Acerca de Nosotros -DocType: Website Settings,Website Theme,Sitio web temático -DocType: DocField,In List View,En Vista de lista +DocType: Website Settings,Website Theme,Tema del Sitio Web +DocType: DocField,In List View,En Vista de Lista DocType: Email Account,Use TLS,Utilice TLS apps/frappe/frappe/email/smtp.py +34,Invalid login or password,Inicio de sesión o contraseña no válidos apps/frappe/frappe/config/setup.py +190,Add custom javascript to forms.,Añadir javascript personalizado las formas . @@ -1082,18 +1082,18 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +111, apps/frappe/frappe/core/page/data_import_tool/exporter.py +219,Mandatory:,Obligatorio: ,User Permissions Manager,Permisos de Usuario Administrador DocType: Property Setter,New value to be set,Nuevo valor a establecer -DocType: Email Alert,Days Before or After,Días anteriores o posteriores +DocType: Email Alert,Days Before or After,Días Anteriores o Posteriores DocType: Email Alert,Email Alert,Alerta por Email apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +34,Select Document Types to set which User Permissions are used to limit access.,Seleccione los Tipos de Documento para establecer los Permisos de Usuario para limitar el acceso. apps/frappe/frappe/website/doctype/blog_post/blog_post.py +84,Blog,Blog -apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} ha ha dejado la conversación en {1} {2} +apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} ha dejado la conversación en {1} {2} DocType: Workflow State,hand-right,a mano derecha DocType: Website Settings,Subdomain,Subdominio DocType: Web Form,Allow Delete,Permitir Borrar DocType: Email Alert,Message Examples,Ejemplos de Mensajes DocType: Web Form,Login Required,Inicio de sesión obligatorio apps/frappe/frappe/config/website.py +59,Write titles and introductions to your blog.,Escribe títulos y las introducciones a tu blog . -DocType: Email Account,Notify if unreplied for (in mins),Notificar si UNREPLIED para (en minutos) +DocType: Email Account,Notify if unreplied for (in mins),Notificar si no tiene respuesta para (en minutos) apps/frappe/frappe/config/website.py +64,Categorize blog posts.,Clasificar las entradas del blog. DocType: DocField,Attach,Adjuntar DocType: DocType,Permission Rules,Reglas de permisos @@ -1117,7 +1117,7 @@ DocType: DocType,Child Tables are shown as a Grid in other DocTypes.,Tablas secu DocType: Website Settings,"If checked, the Home page will be the default Item Group for the website.","Si se selecciona, la página de inicio será el grupo de elementos predeterminado para el sitio web." DocType: Blog Post,"Description for listing page, in plain text, only a couple of lines. (max 140 characters)","Descripción de la página perfil, en texto plano, sólo un par de líneas. (máx. 140 caracteres)" sites/assets/js/desk.min.js +852,Forums,Foros -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,Añadir una restricción usuario +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,Añadir una restricción de usuario DocType: DocType,Name Case,Nombre del Caso apps/frappe/frappe/model/base_document.py +318,Data missing in table,Los datos que faltan en la tabla DocType: Web Form,Success URL,URL de Éxito @@ -1310,7 +1310,7 @@ apps/frappe/frappe/config/setup.py +115,Add / Manage Email Accounts.,Añadir / A DocType: Blog Category,Published,Publicado apps/frappe/frappe/templates/emails/auto_reply.html +1,Thank you for your email,Gracias por tu email DocType: DocField,Small Text,Texto Pequeño -apps/frappe/frappe/core/doctype/user/user.py +472,Administrator accessed {0} on {1} via IP Address {2}.,Administrador accede {0} del {1} ​​a través de la dirección IP {2}. +apps/frappe/frappe/core/doctype/user/user.py +472,Administrator accessed {0} on {1} via IP Address {2}.,Acceso de Administrador {0} en {1} ​​a través de la dirección IP {2}. apps/frappe/frappe/core/doctype/doctype/doctype.py +263,Options 'Dynamic Link' type of field must point to another Link Field with options as 'DocType',"Opciones de campo de tipo 'Vinculo Dinámico' debe apuntar a otro Campo Vínculo con opciones como ""Tipo de Documento""" DocType: About Us Settings,Team Members Heading,Miembros del Equipo Lider DocType: DocField,Do not allow user to change after set the first time,No permita que el usuario pueda cambiar después de establecer la primera vez @@ -1404,7 +1404,7 @@ apps/frappe/frappe/desk/page/activity/activity.js +153,Oct,Octubre DocType: Workflow State,warning-sign,icono de advertencia DocType: Website Settings,"Show title in browser window as ""Prefix - title""",Mostrar título en la ventana del navegador como "Prefijo - título" DocType: Workflow Document State,Update Value,Actualizar Valor -DocType: System Settings,Number Format,Formato de número +DocType: System Settings,Number Format,Formato de Número DocType: Custom Field,Insert After,insertar Después DocType: Social Login Keys,GitHub Client Secret,GitHub Client Secret DocType: Report,Report Name,Nombre del informe @@ -1425,7 +1425,7 @@ DocType: User,Email Settings,Configuración del correo electrónico apps/frappe/frappe/workflow/doctype/workflow/workflow.py +57,{0} not a valid State,{0} no es un Estado válido DocType: Workflow State,ok-circle,ok- círculo apps/frappe/frappe/core/doctype/user/user.py +101,Sorry! User should have complete access to their own record.,¡Lo siento! El usuario debe tener acceso completo a su propio récord. -DocType: Custom Field,In Report Filter,En Filtro de informe +DocType: Custom Field,In Report Filter,En Filtro de Informe DocType: DocType,Hide Actions,Ocultar Acciones DocType: DocType,"\
  • field:[fieldname] - By Field\ @@ -1472,4 +1472,4 @@ DocType: User,Background Style,Estilo de Fondo DocType: System Settings,mm-dd-yyyy,mm-dd-aaaa apps/frappe/frappe/desk/doctype/feed/feed.py +91,{0} logged in,{0} conectado apps/frappe/frappe/templates/emails/new_user.html +4,Your login id is,Su nombre de usuario es -DocType: DocField,Ignore User Permissions,No haga caso de los permisos de usuario +DocType: DocField,Ignore User Permissions,Ignorar los Permisos de Usuario diff --git a/frappe/translations/fa.csv b/frappe/translations/fa.csv index 18b9306474..97922eff3d 100644 --- a/frappe/translations/fa.csv +++ b/frappe/translations/fa.csv @@ -3,7 +3,7 @@ apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assign apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,پست apps/frappe/frappe/config/setup.py +98,Rename many items by uploading a .csv file.,تغییر نام بسیاری از اقلام با آپلود یک فایل. CSV. DocType: Workflow State,pause,وقفه -apps/frappe/frappe/templates/pages/desk.py +19,You are not permitted to access this page.,شما مجاز به دسترسی به این صفحه +apps/frappe/frappe/templates/pages/desk.py +19,You are not permitted to access this page.,شما مجاز به دسترسی به این صفحه نیستید DocType: User,Facebook Username,فیس بوک نام کاربری DocType: Workflow State,eye-open,چشم باز DocType: Bulk Email,Send After,ارسال پس از @@ -22,7 +22,7 @@ sites/assets/js/desk.min.js +555,Rename {0},تغییر نام {0} DocType: Workflow State,zoom-out,کوچک نمایی apps/frappe/frappe/model/document.py +664,Table {0} cannot be empty,جدول {0} نمی تواند خالی باشد DocType: Social Login Keys,GitHub,گیتهاب -apps/frappe/frappe/model/document.py +638,Beginning with,با آغاز +apps/frappe/frappe/model/document.py +638,Beginning with,آغاز با apps/frappe/frappe/core/page/data_import_tool/exporter.py +51,Data Import Template,داده الگو واردات sites/assets/js/desk.min.js +536,Parent,والدین sites/assets/js/desk.min.js +826,"document type..., e.g. customer",نوع سند ...، به عنوان مثال مشتری @@ -85,8 +85,8 @@ apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import w DocType: Comment,Post Topic,ارسال موضوع apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +2,Widths can be set in px or %.,عرض را می توان در پیکسل یا٪ تنظیم کنید. apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +6,Permissions get applied on Users based on what Roles they are assigned.,مجوز های بر روی کاربران بر اساس آنچه نقش آن اختصاص داده می شود. -sites/assets/js/desk.min.js +890,You are not allowed to send emails related to this document,شما امکان پذیر نیست برای ارسال ایمیل های مربوط به این سند -apps/frappe/frappe/website/doctype/website_theme/website_theme.py +30,You are not allowed to delete a standard Website Theme,شما امکان پذیر نیست تم وب سایت استاندارد را حذف کنید +sites/assets/js/desk.min.js +890,You are not allowed to send emails related to this document,شما مجاز به ارسال ایمیل های مرتبط با این سند نیستید +apps/frappe/frappe/website/doctype/website_theme/website_theme.py +30,You are not allowed to delete a standard Website Theme,شما مجاز به حذف یک قالب استاندارد وب سایت نیستید apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +176,Example,مثال DocType: Workflow State,gift,هدیه apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +180,Reqd,Reqd @@ -232,7 +232,7 @@ DocType: Customize Form Field,Customize Form Field,سفارشی کردن فرم apps/frappe/frappe/config/setup.py +47,Check which Documents are readable by a User,بررسی کنید که کدام اسناد توسط کاربر قابل خواندن هستند DocType: User,Reset Password Key,کلید بازیابی کلمه عبور DocType: Email Account,Enable Auto Reply,خودکار را فعال پاسخ -DocType: Workflow State,zoom-in,زوم در +DocType: Workflow State,zoom-in,بزرگنمایی apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,لغو اشتراک از این لیست apps/frappe/frappe/desk/page/activity/activity.js +153,Sep,سپتامبر DocType: DocField,Width,عرض @@ -275,7 +275,7 @@ DocType: Website Theme,Google Font (Text),گوگل قلم (متن) apps/frappe/frappe/core/page/permission_manager/permission_manager.js +316,Did not remove,آیا حذف کنید DocType: Report,Query,پرس و جو DocType: DocType,Sort Order,ترتیب -apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},'در فهرست نمایش برای نوع {0} در ردیف مجاز نیست {1} +apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},'نمایش لیستی' برای نوع {0} در ردیف مجاز {1} نیست DocType: Custom Field,Select the label after which you want to insert new field.,برچسب و پس از آن شما می خواهید برای وارد کردن زمینه های جدید را انتخاب کنید. DocType: Website Settings,Tweet will be shared via your user account (if specified),صدای جیر جیر از طریق حساب کاربری خود را به اشتراک گذاشته (اگر مشخص شده) ,Document Share Report,سند اشتراک گزارش @@ -325,7 +325,7 @@ apps/frappe/frappe/model/document.py +637,none of,هیچکدام از apps/frappe/frappe/core/page/user_permissions/user_permissions.js +127,Upload User Permissions,آپلود مجوز کاربر apps/frappe/frappe/core/page/desktop/all_applications_dialog.html +3,Checked items will be shown on desktop,آیتم های چک خواهد شد بر روی دسکتاپ نشان داده شده است apps/frappe/frappe/core/doctype/doctype/doctype.py +409,{0} cannot be set for Single types,{0} می تواند برای انواع تنها نمی تواند تنظیم شود -apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +97,{0} updated,{0} به روز شده +apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +97,{0} updated,{0} بروز شد apps/frappe/frappe/core/doctype/doctype/doctype.py +399,Report cannot be set for Single types,گزارش می تواند برای انواع تنها نمی تواند تنظیم شود apps/frappe/frappe/desk/page/activity/activity.js +152,Feb,فوریه DocType: DocPerm,Role,نقش @@ -418,7 +418,7 @@ apps/frappe/frappe/desk/page/activity/activity.js +196,{0} on {1},{0} در {1} DocType: Customize Form,Enter Form Type,را وارد کنید فرم نوع sites/assets/js/desk.min.js +917,Updated To New Version,به روز شده برای نسخه های جدید DocType: DocField,Depends On,بستگی دارد به -DocType: DocPerm,Additional Permissions,مجوزهای اضافی +DocType: DocPerm,Additional Permissions,مجوزهای تکمیلی sites/assets/js/form.min.js +302,Compose,سرودن apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +13,Start entering data below this line,شروع ورود اطلاعات زیر این خط DocType: Workflow State,retweet,بازتوییت @@ -568,7 +568,7 @@ apps/frappe/frappe/core/page/user_permissions/user_permissions.js +194,No User R apps/frappe/frappe/email/doctype/email_account/email_account_list.js +10,Default Inbox,صندوق ورودی پیش فرض sites/assets/js/desk.min.js +521,Make a new,یک جدید DocType: Print Settings,PDF Page Size,PDF اندازه صفحه -sites/assets/js/desk.min.js +852,About,در باره +sites/assets/js/desk.min.js +852,About,درباره apps/frappe/frappe/core/page/data_import_tool/exporter.py +66,"For updating, you can update only selective columns.",برای به روز رسانی، شما می توانید ستون های انتخابی تنها به روز رسانی. sites/assets/js/desk.min.js +870,Attach Document Print,ضمیمه کردن یک سند چاپ DocType: Social Login Keys,Google Client ID,گوگل کارفرما ID @@ -643,7 +643,7 @@ DocType: DocPerm,DocPerm,DocPerm apps/frappe/frappe/core/doctype/doctype/doctype.py +273,Precision should be between 1 and 6,دقیق باید بین 1 و 6 است DocType: About Us Team Member,Image Link,لینک تصویر DocType: Workflow State,step-backward,گام به گام به عقب -apps/frappe/frappe/utils/boilerplate.py +228,{app_title},{} app_title +apps/frappe/frappe/utils/boilerplate.py +228,{app_title},{app_title} apps/frappe/frappe/core/page/data_import_tool/exporter.py +65,Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,تنها فیلدها اجباری لازم برای پرونده جدید است. شما می توانید ستون اجباری اگر شما می خواهید حذف کنید. DocType: Workflow State,text-height,متن ارتفاع DocType: Workflow State,map-marker,نقشه نشانگر @@ -652,7 +652,7 @@ DocType: Event,Repeat this Event,تکرار این رویداد DocType: DocPerm,Amend,اصلاح کردن apps/frappe/frappe/templates/includes/login/login.js +43,Valid Login id required.,معتبر ورود شناسه مورد نیاز است. apps/frappe/frappe/desk/doctype/todo/todo.js +30,Re-open,باز کردن مجدد -apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0}-سازمان ملل متحد به اشتراک گذاشته این سند با {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} این سند را از حالت اشتراک با {1} خارج کرد apps/frappe/frappe/templates/emails/auto_reply.html +4,This is an automatically generated reply,این پاسخ به صورت خودکار تولید است apps/frappe/frappe/model/document.py +376,Record does not exist,ضبط وجود ندارد apps/frappe/frappe/templates/pages/404.html +4,Page missing or moved,صفحه گم شده و یا نقل مکان کرد @@ -689,7 +689,7 @@ DocType: Workflow State,fast-backward,سرعت عقب DocType: DocShare,DocShare,DocShare DocType: Report,Add Total Row,اضافه کردن مجموع ردیف apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +19,For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment.,برای مثال اگر شما لغو و اصلاح INV004 آن را تبدیل به یک INV004-1 سند جدید. این کمک می کند تا شما را به پیگیری هر اصلاح. -DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - پیش نویس. 1 - ارائه شده. 2 - لغو +DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - پیش نویس. 1 - ارائه شده. 2 - لغو شده apps/frappe/frappe/core/page/modules_setup/modules_setup.js +5,Show or Hide Modules,نمایش یا عدم نمایش ماژول ها DocType: File Data,Attached To DocType,متصل به DOCTYPE apps/frappe/frappe/desk/page/activity/activity.js +153,Aug,اوت @@ -770,7 +770,7 @@ DocType: Workflow State,flag,پرچم DocType: Web Page,Text Align,متن چین DocType: Contact Us Settings,Forward To Email Address,به جلو به آدرس پست الکترونیک apps/frappe/frappe/core/doctype/doctype/doctype.py +79,Title field must be a valid fieldname,عنوان درست باید fieldname معتبر باشد -DocType: Communication,Archived,آرشیو +DocType: Communication,Archived,بایگانی شد DocType: System Settings,Session Expiry in Hours e.g. 06:00,جلسه انقضاء در ساعت 06:00 به عنوان مثال apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +35,"Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).",هنگامی که شما تعیین کرده اند این، کاربران تنها اسناد دسترسی قادر باشد (. به عنوان مثال وبلاگ پست) که در آن پیوند وجود دارد (به عنوان مثال بلاگر). apps/frappe/frappe/utils/csvutils.py +33,Unable to open attached file. Please try again.,قادر به باز کردن فایل متصل شده است. لطفا دوباره تلاش کنید. @@ -943,10 +943,10 @@ apps/frappe/frappe/model/document.py +425,Cannot edit cancelled document,می ت apps/frappe/frappe/utils/nestedset.py +77,Nested set error. Please contact the Administrator.,خطا مجموعه ای تو در تو. لطفا با مدیر تماس بگیرید. apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +11,, DocType: Workflow State,envelope,پاکت -apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} مشترک این سند با {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} این سند را با {1} به اشتراک گذارده است DocType: Website Settings,Google Plus One,گوگل به علاوه یک apps/frappe/frappe/desk/page/activity/activity.js +153,Jul,ژوئیه -DocType: Communication,Additional Info,اطلاعات اضافی +DocType: Communication,Additional Info,اطلاعات تکمیلی apps/frappe/frappe/config/website.py +44,"Setup of top navigation bar, footer and logo.",راه اندازی ناوبری بار بالا، بالا و پایین صفحه و آرم. apps/frappe/frappe/core/doctype/doctype/doctype.py +352,For {0} at level {1} in {2} in row {3},برای {0} در سطح {1} در {2} در ردیف {3} DocType: Bulk Email,Recipient,گیرنده @@ -1052,7 +1052,7 @@ DocType: Workflow,"If checked, all other workflows become inactive.",در صور apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[برچسب]: [نوع درست] / [گزینه]: [عرض] DocType: Workflow State,folder-close,پوشه نزدیک DocType: Email Alert Recipient,Optional: Alert will only be sent if value is a valid email id.,اختیاری: هشدار تنها ارسال خواهد شد اگر ارزش یک شناسه ایمیل معتبر است. -apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} مجاز به تغییر نام داد شود +apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} مجاز به تغییر نام نمی باشد DocType: Custom Script,Custom Script,سفارشی اسکریپت DocType: ToDo,Assigned To,اختصاص یافته به apps/frappe/frappe/core/doctype/user/user.py +165,Verify Your Account,حسابتان را تایید کنید @@ -1261,7 +1261,7 @@ apps/frappe/frappe/config/setup.py +147,Customized HTML Templates for printing t apps/frappe/frappe/desk/form/utils.py +103,No further records,هیچ پرونده بیشتر DocType: DocField,Long Text,متن طولانی apps/frappe/frappe/core/page/data_import_tool/importer.py +35,Please do not change the rows above {0},لطفا ردیف بالا تغییر نمی {0} -sites/assets/js/desk.min.js +852,(Ctrl + G),(کلیدهای Ctrl + G) +sites/assets/js/desk.min.js +852,(Ctrl + G),(Ctrl + G) sites/assets/js/desk.min.js +808,Sorry! You are not permitted to view this page.,با عرض پوزش! برای مشاهده این صفحه شما مجاز نیست. DocType: Workflow State,bell,ناقوس sites/assets/js/form.min.js +282,Share this document with,به اشتراک گذاشتن این سند با @@ -1298,7 +1298,7 @@ DocType: Workflow State,bold,جسور apps/frappe/frappe/website/doctype/website_settings/website_settings.py +34,{0} does not exist in row {1},{0} در ردیف وجود ندارد {1} DocType: Event,Event Type,نوع رویداد DocType: User,Last Known Versions,تاریخ و زمان آخرین شناخته شده -apps/frappe/frappe/config/setup.py +115,Add / Manage Email Accounts.,اضافه کردن / مدیریت حسابهای ایمیل. +apps/frappe/frappe/config/setup.py +115,Add / Manage Email Accounts.,افزودن / مدیریت حسابهای ایمیل DocType: Blog Category,Published,منتشر apps/frappe/frappe/templates/emails/auto_reply.html +1,Thank you for your email,تشکر از شما برای ایمیل شما DocType: DocField,Small Text,متن کوچک @@ -1368,7 +1368,7 @@ DocType: Email Alert,Optional: The alert will be sent if this expression is true apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +27,You can use Customize Form to set levels on fields.,شما می توانید فرم سفارشی را به مجموعه سطح در زمینه استفاده کنید. DocType: DocPerm,Report,گزارش apps/frappe/frappe/templates/generators/web_form.html +18,Please login to create a new {0},لطفا وارد شوید و برای ایجاد یک جدید {0} -apps/frappe/frappe/desk/reportview.py +69,{0} is saved,{0} ذخیره شده است +apps/frappe/frappe/desk/reportview.py +69,{0} is saved,{0} ذخیره شد apps/frappe/frappe/core/doctype/user/user.py +234,User {0} cannot be renamed,کاربر {0} نمی تواند تغییر نام داد شود apps/frappe/frappe/website/doctype/website_settings/website_settings.js +17,Exported,صادر DocType: DocPerm,"JSON list of DocTypes used to apply User Permissions. If empty, all linked DocTypes will be used to apply User Permissions.",لیست JSON از DocTypes استفاده به درخواست مجوز کاربر. اگر خالی، همه DocTypes مرتبط استفاده خواهد شد به درخواست مجوز کاربر. @@ -1404,7 +1404,7 @@ DocType: Email Alert,Save,ذخیره DocType: Website Settings,Title Prefix,عنوان پیشوند DocType: Email Account,Notifications and bulk mails will be sent from this outgoing server.,اخبار و ایمیل فله خواهد شد از این سرور خروجی ارسال می شود. DocType: Workflow State,cog,دندانه دار کردن -sites/assets/js/desk.min.js +522,{0} added,{0} اضافه +sites/assets/js/desk.min.js +522,{0} added,{0} اضافه شد sites/assets/js/list.min.js +65,Not In,نه در DocType: Workflow State,star,ستاره apps/frappe/frappe/desk/page/activity/activity.js +153,Nov,نوامبر diff --git a/frappe/translations/fr.csv b/frappe/translations/fr.csv index 388ece9ef9..b5c2ab32f2 100644 --- a/frappe/translations/fr.csv +++ b/frappe/translations/fr.csv @@ -151,7 +151,7 @@ sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Pleas DocType: Property Setter,Field Name,Nom de domaine sites/assets/js/desk.min.js +684,or,ou apps/frappe/frappe/templates/generators/web_form.html +265,Continue,Continuer -DocType: Custom Field,Fieldname,Fieldname +DocType: Custom Field,Fieldname,Nom du champs DocType: Workflow State,certificate,certificat DocType: User,Tile,Mosaïque DocType: User,"Get your globally recognized avatar from Gravatar.com","Téléchargez votre avatar mondialement reconnu de Gravatar.com " @@ -178,7 +178,7 @@ apps/frappe/frappe/utils/nestedset.py +210,Merging is only possible between Grou apps/frappe/frappe/utils/file_manager.py +40,Added {0},Ajouté {0} DocType: Currency,Fraction Units,Unités fraction DocType: Web Page,Parent Web Page,Parent page Web -apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} doit être réglé en premier +apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} doit être paramétré en premier DocType: Workflow State,plane,plan apps/frappe/frappe/core/page/data_import_tool/exporter.py +64,"If you are uploading new records, ""Naming Series"" becomes mandatory, if present.","Si vous téléchargez de nouveaux records, ""Nommer Series"" devient obligatoire, se il est présent." apps/frappe/frappe/core/doctype/doctype/doctype.py +294,Fold can not be at the end of the form,Fold ne peut pas être à la fin de la forme @@ -226,7 +226,7 @@ DocType: Email Alert,Days Before,Jours Avant apps/frappe/frappe/website/doctype/website_settings/website_settings.js +72,Select a Banner Image first.,Choisissez une bannière image première. DocType: Workflow State,volume-down,volume-bas DocType: Email Account,Send Notification to,Envoyer une notification à -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +626,Saved,Saved +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +626,Saved,Enregistré apps/frappe/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py +28,Please specify doctype,S'il vous plaît indiquer doctype DocType: Print Format,Format Data,Format des données DocType: Customize Form Field,Customize Form Field,Personnaliser un champ de formulaire @@ -410,7 +410,7 @@ DocType: User,"User Type ""System User"" can access Desktop. ""Website User"" ca DocType: File Data,Attached To Name,Joint au nom apps/frappe/frappe/email/receive.py +53,Invalid User Name or Support Password. Please rectify and try again.,Numéro de référence et date de référence est nécessaire pour {0} DocType: Email Account,Yahoo Mail,Yahoo Mail -apps/frappe/frappe/core/page/permission_manager/permission_manager.js +469,Saved!,Saved! +apps/frappe/frappe/core/page/permission_manager/permission_manager.js +469,Saved!,Enregistré! apps/frappe/frappe/desk/page/activity/activity_row.html +17,Updated {0}: {1},Mise à jour {0}: {1} DocType: DocType,Master,Maître DocType: DocType,User Cannot Create,L'utilisateur ne peut pas créer @@ -611,7 +611,7 @@ DocType: Social Login Keys,Facebook Client ID,Facebook identification client DocType: Workflow State,Inbox,Boîte de réception DocType: Workflow State,Tag,Balise DocType: Custom Script,Script,Scénario -sites/assets/js/desk.min.js +852,My Settings,Mes réglages +sites/assets/js/desk.min.js +852,My Settings,Mes paramètres DocType: Website Theme,Text Color,Couleur du texte apps/frappe/frappe/website/doctype/web_form/web_form.py +53,Invalid Request,Invalid Request sites/assets/js/desk.min.js +366,This form does not have any input,Ce formulaire ne dispose pas d'entrée @@ -656,14 +656,14 @@ DocType: Event,Repeat this Event,Répétez cette événement DocType: DocPerm,Amend,Modifier apps/frappe/frappe/templates/includes/login/login.js +43,Valid Login id required.,Valable Connexion Identifiant nécessaire. apps/frappe/frappe/desk/doctype/todo/todo.js +30,Re-open,réouvrir -apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} non partagé ce document {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} ne pas partager ce document avec {1} apps/frappe/frappe/templates/emails/auto_reply.html +4,This is an automatically generated reply,Ce est une réponse générée automatiquement apps/frappe/frappe/model/document.py +376,Record does not exist,N'existe pas d'enregistrement apps/frappe/frappe/templates/pages/404.html +4,Page missing or moved,Page manquante ou déplacé sites/assets/js/desk.min.js +479,Open Link,Open Link apps/frappe/frappe/desk/form/load.py +42,Did not load,N'a pas été chargé apps/frappe/frappe/desk/query_report.py +79,Query must be a SELECT,Requête doit être un SELECT -DocType: Website Settings,Facebook Share,Facebook Partager +DocType: Website Settings,Facebook Share,Partager avec Facebook apps/frappe/frappe/utils/file_manager.py +181,File size exceeded the maximum allowed size of {0} MB,La taille du fichier a dépassé la taille maximale autorisée de {0} Mo apps/frappe/frappe/core/doctype/doctype/doctype.py +344,Enter at least one permission row,Entrez au moins une rangée d'autorisation sites/assets/js/desk.min.js +536,Created On,Créé le @@ -818,7 +818,7 @@ DocType: Workflow State,Style,Style apps/frappe/frappe/website/doctype/blog_post/blog_post.py +166,{0} comments,{0} commentaires DocType: Customize Form Field,Label and Type,Étiquette et le type DocType: Workflow State,forward,avant -sites/assets/js/form.min.js +270,{0} edited this {1},{0} édité cette {1} +sites/assets/js/form.min.js +270,{0} edited this {1},{0} a édité {1} DocType: Web Page,Custom Javascript,Javascript personnalisé DocType: DocPerm,Submit,Soumettre DocType: Website Settings,Sub-domain provided by erpnext.com,Sous-domaine fourni par erpnext.com @@ -852,7 +852,7 @@ apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,Décembre DocType: Event,Leave blank to repeat always,Laissez vide pour répéter toujours DocType: Event,Ends on,Se termine le apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,Article ne peut être ajouté à ses propres descendants -sites/assets/js/form.min.js +270,{0} created this {1},{0} créé cette {1} +sites/assets/js/form.min.js +270,{0} created this {1},{0} a créé {1} apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.","La tâche {0}, que vous avez attribué au {1}, a été fermée par {2}." DocType: Blogger,Short Name,Nom court DocType: Workflow State,magnet,aimant @@ -948,7 +948,7 @@ apps/frappe/frappe/model/document.py +425,Cannot edit cancelled document,Vous ne apps/frappe/frappe/utils/nestedset.py +77,Nested set error. Please contact the Administrator.,Niché erreur de réglage . S'il vous plaît contacter l'administrateur . apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +11,, DocType: Workflow State,envelope,enveloppe -apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} partagé ce document {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} partagé ce document avec {1} DocType: Website Settings,Google Plus One,Google Plus One apps/frappe/frappe/desk/page/activity/activity.js +153,Jul,Juillet DocType: Communication,Additional Info,Informations supplémentaires @@ -1007,7 +1007,7 @@ sites/assets/js/form.min.js +261,New Custom Print Format,New Custom Format d' DocType: DocPerm,Create,Créer DocType: About Us Settings,Org History,Org Histoire DocType: Workflow,Workflow Name,Nom du workflow -DocType: Web Form,Allow Edit,Autoriser Modifier +DocType: Web Form,Allow Edit,Autoriser la modification apps/frappe/frappe/workflow/doctype/workflow/workflow.py +64,Cannot change state of Cancelled Document. Transition row {0},Vous ne pouvez pas changer l'état du document annulé . DocType: Workflow,"Rules for how states are transitions, like next state and which role is allowed to change state etc.","Règles pour la manière dont les États sont des transitions, comme état suivant et dont le rôle est autorisé à changer d'état, etc" apps/frappe/frappe/desk/form/save.py +21,{0} {1} already exists,{0} {1} existe déjà @@ -1057,7 +1057,7 @@ DocType: Workflow,"If checked, all other workflows become inactive.","Si elle es apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[Étiquette]: [Type de champ] / [Options]: [Largeur] DocType: Workflow State,folder-close,dossier de près DocType: Email Alert Recipient,Optional: Alert will only be sent if value is a valid email id.,Facultatif: Alerte ne sera envoyé si la valeur est une id e-mail valide. -apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} ne peuvent pas être renommé +apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} n'est pas permi à être renommé DocType: Custom Script,Custom Script,Script personnalisé DocType: ToDo,Assigned To,assignée à apps/frappe/frappe/core/doctype/user/user.py +165,Verify Your Account,Vérifiez votre compte @@ -1068,7 +1068,7 @@ DocType: User,Send Notifications for Transactions I Follow,Envoyer des notificat apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write","{0} : Vous ne pouvez pas mettre sur Envoyer, annuler, de modifier sans écriture" apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,Configuration> utilisateur apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,Merci -sites/assets/js/form.min.js +180,Saving,Économie +sites/assets/js/form.min.js +180,Saving,En cours d'enregistrement DocType: Print Settings,Print Style Preview,Style d'impression Aperçu DocType: About Us Settings,About Us Settings,Paramètrages À propos DocType: Website Settings,Website Theme,Site Thème @@ -1089,7 +1089,7 @@ apps/frappe/frappe/website/doctype/blog_post/blog_post.py +84,Blog,Blog apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} a a quitté la conversation dans {1} {2} DocType: Workflow State,hand-right,la main droite DocType: Website Settings,Subdomain,Sous-domaine -DocType: Web Form,Allow Delete,Autoriser Supprimer +DocType: Web Form,Allow Delete,Autoriser la suppression DocType: Email Alert,Message Examples,Exemples de messages DocType: Web Form,Login Required,Connexion requise apps/frappe/frappe/config/website.py +59,Write titles and introductions to your blog.,Écrire des titres et des introductions sur votre blog. @@ -1216,7 +1216,7 @@ apps/frappe/frappe/templates/includes/comments/comments.py +50,{0} by {1},{0} pa apps/frappe/frappe/core/doctype/comment/comment.py +39,Cannot add more than 50 comments,Vous ne pouvez pas ajouter plus de 50 commentaires DocType: Website Settings,Top Bar Items,Articles Top Bar DocType: Print Settings,Print Settings,Paramètres d'impression -DocType: DocType,Max Attachments,Attachments Max +DocType: DocType,Max Attachments,Maximum pièces jointes DocType: Page,Page,Page DocType: Workflow State,briefcase,Malette apps/frappe/frappe/model/base_document.py +411,Value cannot be changed for {0},Valeur ne peut pas être changé pour {0} @@ -1236,7 +1236,7 @@ DocType: Print Format,Print Format,Format d'impression apps/frappe/frappe/config/website.py +28,User ID of a blog writer.,ID de l'utilisateur d'un écrivain blog. apps/frappe/frappe/config/setup.py +32,Set Permissions on Document Types and Roles,Définir les autorisations des rôles sur les types de documents . sites/assets/js/desk.min.js +904,New in version {0},Nouveau dans la version {0} -DocType: About Us Settings,"""Company History""","Histoire de la société" +DocType: About Us Settings,"""Company History""","""L'historique de la société""" apps/frappe/frappe/permissions.py +226,Permission already set,Permission déjà défini apps/frappe/frappe/desk/page/activity/activity_row.html +15,Commented on {0}: {1},Commenté sur {0}: {1} apps/frappe/frappe/core/page/user_permissions/user_permissions.js +243,These restrictions will apply for Document Types where 'Apply User Permissions' is checked for the permission rule and a field with this value is present.,Ces restrictions seront appliquées pour les types de documents où «Appliquer les autorisations des utilisateurs» est cochée pour la règle de l'autorisation et un champ avec cette valeur est présente. @@ -1350,7 +1350,7 @@ DocType: User,Timezone,Fuseau horaire sites/assets/js/desk.min.js +538,Unable to load: {0},Vous n'êtes pas autorisé à imprimer ce document DocType: DocField,Read Only,Lecture seule DocType: Print Settings,Send Print as PDF,Envoyer Imprimer en PDF -DocType: Workflow Transition,Allowed,Permis +DocType: Workflow Transition,Allowed,Authorisé apps/frappe/frappe/core/doctype/doctype/doctype.py +287,There can be only one Fold in a form,Il ne peut y avoir qu'un seul pli sous une forme apps/frappe/frappe/website/doctype/website_settings/website_settings.py +23,Invalid Home Page,Invalid Page d'accueil apps/frappe/frappe/core/doctype/doctype/doctype.py +378,{0}: Permission at level 0 must be set before higher levels are set,{0} : autorisation au niveau 0 doit être réglé avant que les niveaux plus élevés sont fixés @@ -1375,7 +1375,7 @@ DocType: Email Alert,Optional: The alert will be sent if this expression is true apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +27,You can use Customize Form to set levels on fields.,Vous pouvez utiliser le formulaire pour définir les niveaux de champs . DocType: DocPerm,Report,Rapport apps/frappe/frappe/templates/generators/web_form.html +18,Please login to create a new {0},Se il vous plaît vous identifier pour créer un nouveau {0} -apps/frappe/frappe/desk/reportview.py +69,{0} is saved,{0} est sauvé +apps/frappe/frappe/desk/reportview.py +69,{0} is saved,{0} est enregistré apps/frappe/frappe/core/doctype/user/user.py +234,User {0} cannot be renamed,Utilisateur {0} ne peut pas être renommé apps/frappe/frappe/website/doctype/website_settings/website_settings.js +17,Exported,exporté DocType: DocPerm,"JSON list of DocTypes used to apply User Permissions. If empty, all linked DocTypes will be used to apply User Permissions.","JSON liste des DocTypes utilisés pour appliquer les autorisations des utilisateurs. Se il est vide, tous liés DocTypes seront utilisés pour appliquer les autorisations des utilisateurs." diff --git a/frappe/translations/hu.csv b/frappe/translations/hu.csv index d3f8d22e4c..f5f36862ae 100644 --- a/frappe/translations/hu.csv +++ b/frappe/translations/hu.csv @@ -1,6 +1,6 @@ -apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +224,Press Esc to close,Esc gombbal bezárhatjuk +apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +224,Press Esc to close,ESC gombbal bezárható apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}","Egy új feladatot, {0}, már rendelt meg a {1}. {2}" -apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,Posta +apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,Hozzászólás apps/frappe/frappe/config/setup.py +98,Rename many items by uploading a .csv file.,Átnevezése sok elem feltöltésével CSV-fájlba. DocType: Workflow State,pause,szünet apps/frappe/frappe/templates/pages/desk.py +19,You are not permitted to access this page.,"Nincs engedélye, hogy belépjen az oldalra." @@ -10,10 +10,10 @@ DocType: Bulk Email,Send After,Küldje után apps/frappe/frappe/utils/file_manager.py +28,Please select a file or url,Válasszon egy fájlt vagy URL DocType: DocField,DocField,DocField DocType: Comment,Comment By Fullname,Megjegyző teljes neve -sites/assets/js/form.min.js +282,Not shared with anyone yet.,Senkinek nem még. +sites/assets/js/form.min.js +282,Not shared with anyone yet.,Senkivel sem lett megosztva még. DocType: DocField,Options,Opciók sites/assets/js/report.min.js +17,Cannot edit standard fields,Nem szerkesztheti mezők -DocType: Print Format,Print Format Builder,Print Format Builder +DocType: Print Format,Print Format Builder,Nyomtatvány sablon készítő DocType: Report,Report Manager,Report Manager DocType: Workflow,Document States,Dokumentum állapotok sites/assets/js/desk.min.js +807,Sorry! I could not find what you were looking for.,"Elnézést! Nem találtam meg azt, amit keres." @@ -44,7 +44,7 @@ DocType: Contact Us Settings,"Contact options, like ""Sales Query, Support Query sites/assets/js/editor.min.js +155,Insert,Insert sites/assets/js/desk.min.js +512,Select {0},Válassza ki a {0} DocType: Feed,Color,Szín -DocType: Workflow State,indent-right,francia-right +DocType: Workflow State,indent-right,behúzás-jobbra sites/assets/js/desk.min.js +752,Web Link,Web Link apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +33,"Recommended bulk editing records via import, or understanding the import format.","Ajánlott tömeges szerkesztési bejegyzések importálás útján, vagy megérteni a behozatali formátumban." apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +36,"Apart from System Manager, roles with Set User Permissions right can set permissions for other users for that Document Type.","Eltekintve System Manager, szerepeket Set felhasználói engedélyek jobb beállíthatja az engedélyeket a többi felhasználó számára, hogy Document Type." @@ -59,10 +59,10 @@ DocType: Workflow,Workflow State Field,Workflow állam Helytelenül DocType: DocType,Title Field,Cím Helytelenül apps/frappe/frappe/core/doctype/user/user.py +478,"If you think this is unauthorized, please change the Administrator password.","Ha úgy gondolja, ez nem engedélyezett, kérjük, változtassa meg a rendszergazdai jelszót." DocType: Workflow State,eject,kidob -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +16,Help for User Permissions,Help for felhasználói engedélyek +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +16,Help for User Permissions,Súgó a felhasználói engedélyekhez apps/frappe/frappe/email/bulk.py +78,Unsubscribe link: {0},Leiratkozás link: {0} DocType: Communication,Visit,Látogatás -apps/frappe/frappe/desk/page/applications/application_row.html +7,Install,Felszerel +apps/frappe/frappe/desk/page/applications/application_row.html +7,Install,Telepítés DocType: Website Settings,Twitter Share via,Twitter Megosztás apps/frappe/frappe/config/website.py +33,Embed image slideshows in website pages.,Embed diavetítést a weblapok. DocType: Workflow Action,Workflow Action Name,Workflow Művelet neve @@ -80,9 +80,9 @@ DocType: Website Settings,Select an image of approx width 150px with a transpare apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +61,"Insert After field '{0}' mentioned in Custom Field '{1}', does not exist","Után beszúrt mező '{0}' említett egyéni mező ""{1}"", nem létezik" DocType: Workflow State,circle-arrow-up,kör-nyíl-fel sites/assets/js/desk.min.js +765,Uploading...,Feltöltés alatt ... -DocType: Workflow State,italic,kurzív +DocType: Workflow State,italic,dőlt apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import without Create,{0}: Nem állítható Import nélküli létrehozása -DocType: Comment,Post Topic,Hozzászólás Téma +DocType: Comment,Post Topic,Hozzászólás témája apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +2,Widths can be set in px or %.,Szélességben állítható px illetve%. apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +6,Permissions get applied on Users based on what Roles they are assigned.,"Engedélyek kap alkalmazni felhasználók alapján, amit szerepek vannak rendelve." sites/assets/js/desk.min.js +890,You are not allowed to send emails related to this document,"Akkor nem szabad, hogy küldjön e-mailt ezzel kapcsolatos dokumentum" @@ -113,7 +113,7 @@ DocType: Bulk Email,Bulk Email records.,Tömeges e-mail rekordokat. apps/frappe/frappe/config/setup.py +217,Send download link of a recent backup to System Managers,Küldd letöltési linket egy friss biztonsági mentést a rendszer vezetőivel DocType: Email Account,e.g. replies@yourcomany.com. All replies will come to this inbox.,pl. valaszok@cegem.hu. Minden válasz ebbe a postafiókba fog jönni. apps/frappe/frappe/templates/includes/login/login.js +31,Valid email and name required,Érvényes e-mail és név szükséges -DocType: DocType,Hide Heading,Hide címsor +DocType: DocType,Hide Heading,Fejszöveg elrejtése DocType: Workflow State,remove-circle,remove-körbe apps/frappe/frappe/config/website.py +54,Javascript to append to the head section of the page.,"Javascript hozzáfűzni, hogy a fejrész az oldal." apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +53,Reset to defaults,Reset to defaults @@ -121,18 +121,18 @@ DocType: Workflow,Transition Rules,Átmeneti szabályok apps/frappe/frappe/core/doctype/report/report.js +11,Example:,Például: DocType: Workflow,Defines workflow states and rules for a document.,Meghatározza munkafolyamat államok és szabályok a dokumentumot. DocType: DocType,Show this field as title,"Mutasd ezen a területen, mint cím" -apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},"Fieldname {0} nem lehet speciális karaktereket, mint a {1}" +apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},"A {0} mezőnév nem tartalmazhat speciális karaktereket, mint a(z) {1}" apps/frappe/frappe/model/document.py +388,Error: Document has been modified after you have opened it,"Hiba: A dokumentum módosításra került, miután kinyitotta" apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0}: Nem állítható hozzárendelése Küldje ha nem Submittable DocType: Social Login Keys,Facebook,Facebook apps/frappe/frappe/templates/pages/list.py +59,"Filtered by ""{0}""",Szűrés "{0}" -sites/assets/js/desk.min.js +910,Message from {0},Üzenet a {0} +sites/assets/js/desk.min.js +910,Message from {0},{0} üzenete DocType: Blog Settings,Blog Title,Blog Cím apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +12,Edit to set heading,Szerkesztés beállítani fejezet DocType: About Us Settings,Team Members,Csapat tagjai sites/assets/js/desk.min.js +467,Please attach a file or set a URL,"Kérjük, csatolja a fájlt, vagy állítsa egy URL" -DocType: DocField,Permissions,Engedélyek -DocType: Workflow State,plus-sign,plus-jel +DocType: DocField,Permissions,Jogosultságok +DocType: Workflow State,plus-sign,plusz-jel sites/assets/js/desk.min.js +830,module name..., modul nevét ... DocType: Event,Public,Nyilvános apps/frappe/frappe/email/smtp.py +131,Email Account not setup. Please create a new Email Account from Setup > Email > Email Account,"Email fiók nem beállítás. Kérjük, hozzon létre egy új email fiókot Beállítás> Email> E-mail fiók" @@ -150,7 +150,7 @@ sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Pleas DocType: Property Setter,Field Name,Mező neve sites/assets/js/desk.min.js +684,or,vagy apps/frappe/frappe/templates/generators/web_form.html +265,Continue,Folytatódik -DocType: Custom Field,Fieldname,Fieldname +DocType: Custom Field,Fieldname,Mezőnév DocType: Workflow State,certificate,igazolás DocType: User,Tile,Cserép DocType: User,"Get your globally recognized avatar from Gravatar.com","Hozd a világszerte elismert avatar Gravatar.com " @@ -172,7 +172,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +459, DocType: File Data,File URL,Fájl URL apps/frappe/frappe/desk/doctype/event/event.py +64,Upcoming Events for Today,Közelgő események a Today DocType: Email Alert Recipient,Email By Document Field,Email dokumentum Field -DocType: File Data,File Data,Fájl adatok +DocType: File Data,File Data,Fájlok apps/frappe/frappe/utils/nestedset.py +210,Merging is only possible between Group-to-Group or Leaf Node-to-Leaf Node,Összevonása csak akkor lehetséges közötti Group-to-csoport vagy Leaf Node-to-Leaf Node apps/frappe/frappe/utils/file_manager.py +40,Added {0},Hozzáadva: {0} DocType: Currency,Fraction Units,Frakciót egységek @@ -193,7 +193,7 @@ sites/assets/js/editor.min.js +125,Indent (Tab),Francia bekezdés (Tab) DocType: Workflow State,List,Lista DocType: Page Role,Page Role,Oldal szerepe apps/frappe/frappe/core/doctype/doctype/doctype.py +248,Field {0} in row {1} cannot be hidden and mandatory without default,"Helytelenül {0} sorban {1} nem lehet elrejteni, és a kötelező nélkül alapértelmezett" -DocType: System Settings,mm/dd/yyyy,mm / dd / yyyy +DocType: System Settings,mm/dd/yyyy,hh/nn/éééé apps/frappe/frappe/email/doctype/email_account/email_account.py +231,Re:,Re: DocType: Currency,"Sub-currency. For e.g. ""Cent""","Sub-valuta. Pl ""Cent""" DocType: Letter Head,Check this to make this the default letter head in all prints,"Jelölje be ezt, hogy ez az alapértelmezett fejléces legyen minden nyomtatásnál" @@ -217,7 +217,7 @@ DocType: Website Theme,Hide Sidebar,Hide Sidebar sites/assets/js/list.min.js +98,Gantt,Gantt DocType: About Us Settings,Introduce your company to the website visitor.,"Mutassa be a cég, hogy a honlap látogatói." apps/frappe/frappe/print/doctype/print_format/print_format.js +14,Please duplicate this to make changes,Kérjük kétszerezniük ezt a változtatásra -DocType: Print Settings,Font Size,Font Size +DocType: Print Settings,Font Size,Betűméret sites/assets/js/desk.min.js +852,Unread Messages,Az olvasatlan üzenetek DocType: Workflow State,facetime-video,FaceTime-video apps/frappe/frappe/website/doctype/blog_post/blog_post.py +164,1 comment,1 hozzászólás @@ -237,7 +237,7 @@ apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,Leiratkozni a l apps/frappe/frappe/desk/page/activity/activity.js +153,Sep,Szeptember DocType: DocField,Width,Szélesség DocType: Email Account,Notify if unreplied,"Értesítés, ha: megválaszolatlan" -DocType: DocType,Fields,Fields +DocType: DocType,Fields,Mezők apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +15,Parent Table,Szülő táblázat apps/frappe/frappe/website/doctype/website_settings/website_settings.py +38,{0} in row {1} cannot have both URL and child items,{0} sorban {1} nem lehet egyszerre URL és a gyermek elemek apps/frappe/frappe/utils/nestedset.py +194,Root {0} cannot be deleted,Root {0} nem lehet törölni @@ -256,31 +256,31 @@ apps/frappe/frappe/core/doctype/user/user.py +332,Cannot Update: Incorrect / Exp DocType: DocField,Set Only Once,Állítsa Csak egyszer apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import as {1} is not importable,"{0}: Nem állítható import, mint {1} nem importálható" DocType: Top Bar Item,"target = ""_blank""","target = ""_blank""" -DocType: Workflow State,hdd,hdd +DocType: Workflow State,hdd,HDD apps/frappe/frappe/desk/query_report.py +18,You don't have access to Report: {0},Nem férnek hozzá jelentése: {0} DocType: User,Send Welcome Email,Küldje Üdvözöljük Email apps/frappe/frappe/core/page/user_permissions/user_permissions.js +132,Upload CSV file containing all user permissions in the same format as Download.,"Töltsd fel CSV fájlt, amely tartalmazza a felhasználói jogosultságok ugyanabban a formában, mint Download." DocType: Feed,Doc Name,Doc név -DocType: DocField,Heading,Rovat +DocType: DocField,Heading,Fejszöveg DocType: Workflow State,resize-vertical,átméretezése függőleges DocType: Contact Us Settings,Introductory information for the Contact Us Page,Bevezető információk a Kapcsolat oldalon DocType: Workflow State,thumbs-down,hüvelykujját lefelé DocType: Comment,Comment Time,Megjegyzés Idő -DocType: Workflow State,indent-left,francia-bal +DocType: Workflow State,indent-left,behúzás-balra DocType: Currency,Currency Name,Pénznem neve DocType: Report,Javascript,Javascript DocType: File Data,Content Hash,Tartalom Hash DocType: User,Stores the JSON of last known versions of various installed apps. It is used to show release notes.,"Üzletek a JSON az utolsó ismert változatait különböző telepített alkalmazások. Ez arra szolgál, hogy a leírásokat." DocType: Website Theme,Google Font (Text),Google betűtípus (szöveg) apps/frappe/frappe/core/page/permission_manager/permission_manager.js +316,Did not remove,Nem törölte -DocType: Report,Query,Kérdés +DocType: Report,Query,Lekérdezés DocType: DocType,Sort Order,Sort Order apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},"""A lista nézetben"" nem megengedett {0} típusú sorban {1}" DocType: Custom Field,Select the label after which you want to insert new field.,"Válassza ki a címkét, amely után be szeretné szúrni az új területen." DocType: Website Settings,Tweet will be shared via your user account (if specified),Tweet fogják osztani keresztül a felhasználói fiók (ha meg) ,Document Share Report,Dokumentum Megosztás Jelentés DocType: User,Last Login,Utolsó belépés -apps/frappe/frappe/core/doctype/doctype/doctype.py +312,Fieldname is required in row {0},Fieldname szükséges sorában {0} +apps/frappe/frappe/core/doctype/doctype/doctype.py +312,Fieldname is required in row {0},A mezőnév szükséges a(z) {0} sorában apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +4,Column,Oszlop DocType: Custom Field,Adds a custom field to a DocType,Hozzáad egy egyedi mező DocType sites/assets/js/editor.min.js +103,Bold (Ctrl/Cmd+B),Félkövér (Ctrl / Cmd + B) @@ -294,12 +294,12 @@ sites/assets/js/editor.min.js +107,Number list,Számú lista apps/frappe/frappe/desk/page/messages/messages_sidebar.html +9,Everyone,Mindenki DocType: Workflow State,backward,hátrafelé apps/frappe/frappe/config/setup.py +79,Set numbering series for transactions.,Szettszámozás sorozat tranzakciókat. -DocType: Email Account,POP3 Server,POP3 Server +DocType: Email Account,POP3 Server,POP3 szerver DocType: User,Last IP,Utolsó IP apps/frappe/frappe/core/doctype/communication/communication.js +17,Add To,Add To DocType: DocPerm,Filter records based on User Permissions defined for a user,Filter bejegyzések alapján Felhasználói meghatározott engedélyek felhasználó sites/assets/js/editor.min.js +111,Insert picture (or just drag & drop),Kép beszúrása (vagy csak drag & drop) -apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +29,Fieldname not set for Custom Field,Fieldname nem állította be az egyéni mező +apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +29,Fieldname not set for Custom Field,Mezőnév nem állítható be be egyéni mezőnek sites/assets/js/desk.min.js +536,Last Updated By,Utoljára módosította DocType: Website Theme,Background Color,Háttér színe sites/assets/js/desk.min.js +893,There were errors while sending email. Please try again.,"Közben hiba küldeni. Kérjük, próbálja újra." @@ -312,7 +312,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder_field.ht apps/frappe/frappe/core/page/permission_manager/permission_manager.js +487,Restore Original Permissions,Restore eredeti jogosultságok DocType: DocField,Button,Gomb DocType: Email Account,Default Outgoing,Alapértelmezett kimenő -DocType: Workflow State,play,játék +DocType: Workflow State,play,indítás apps/frappe/frappe/templates/emails/new_user.html +5,Click on the link below to complete your registration and set a new password,"Kattintson az alábbi linkre, hogy a regisztrációt és egy új jelszót" apps/frappe/frappe/core/page/permission_manager/permission_manager.js +396,Did not add,Nem adja hozzá DocType: Contact Us Settings,Contact Us Settings,Kapcsolat beállítások @@ -362,8 +362,8 @@ DocType: Workflow State,minus,mínusz sites/assets/js/desk.min.js +183,Server Error: Please check your server logs or contact tech support.,"Server Error: Kérjük, ellenőrizze a szerver logok, vagy forduljon tech support." apps/frappe/frappe/core/doctype/user/user.py +115,Welcome email sent,Üdvözöljük küldött e-mail apps/frappe/frappe/core/doctype/user/user.py +352,Already Registered,Már regisztrált -DocType: System Settings,Float Precision,Float Precision -DocType: Property Setter,Property Setter,Property szetter +DocType: System Settings,Float Precision,Lebegőpontos pontossága +DocType: Property Setter,Property Setter,Tulajdonságbeállító apps/frappe/frappe/core/page/user_permissions/user_permissions.js +217,Select User or DocType to start.,Válassza a Felhasználó vagy DocType kezdeni. apps/frappe/frappe/desk/page/applications/applications.js +24,No Apps Installed,Nem alkalmazásokat telepíteni apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +181,Mark the field as Mandatory,"Jelölje meg a pályán, mivel Kötelező" @@ -375,8 +375,8 @@ DocType: Country,Geo,Geo DocType: Blog Category,Blog Category,Blog Kategória DocType: User,Roles HTML,Szerepek HTML apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +109,All customizations will be removed. Please confirm.,"Minden testreszabás eltávolításra kerül. Kérjük, erősítse meg." -DocType: Page,Page HTML,Oldal HTML -DocType: Web Page,Header,Header +DocType: Page,Page HTML,HTML oldal +DocType: Web Page,Header,Fejléc sites/assets/js/desk.min.js +536,Unknown Column: {0},Ismeretlen oszlop: {0} DocType: Email Alert Recipient,Optional: Always send to these ids. Each email id on a new row,"Opcionális: Mindig küld az azonosítók. Minden e-mailt, id egy új sor" apps/frappe/frappe/core/page/permission_manager/permission_manager.js +292,Users with role {0}:,A felhasználók a szerepet {0}: @@ -390,7 +390,7 @@ apps/frappe/frappe/config/setup.py +66,"Language, Date and Time settings","Nyelv DocType: User,Represents a User in the system.,Képvisel Felhasználó a rendszerben. apps/frappe/frappe/desk/form/assign_to.py +114,"The task {0}, that you assigned to {1}, has been closed.","A feladat {0}, hogy rendelt {1}, lezárták." DocType: User,Modules Access,Modulok Access -DocType: Print Format,Print Format Type,Print Format Type +DocType: Print Format,Print Format Type,Nyomtatvány sablon típusa sites/assets/js/desk.min.js +841,Open Source Applications for the Web,Open Source Applications for the Web DocType: DocType,Hide Toolbar,Eszköztár elrejtése DocType: Email Account,SMTP Settings for outgoing emails,SMTP beállítások a kimenő e-mailek @@ -398,7 +398,7 @@ apps/frappe/frappe/core/page/data_import_tool/data_import_tool.js +116,Import Fa apps/frappe/frappe/templates/emails/password_update.html +3,Your password has been updated. Here is your new password,Jelszavát frissült. Itt az új jelszót DocType: Email Account,Auto Reply Message,Auto Reply Message DocType: Email Alert,Condition,Állapot -sites/assets/js/desk.min.js +829,Open a module or tool,Nyisson meg egy modul vagy eszköz +sites/assets/js/desk.min.js +829,Open a module or tool,Modul vagy eszköz megnyitása DocType: Module Def,App Name,Alkalmazás neve DocType: Workflow,"Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)","Mező, amely képviseli az Workflow állam a tranzakció (ha a területen nincs jelen, egy új rejtett Saját mező jön létre)" apps/frappe/frappe/templates/pages/login.py +162,Email not verified with {1},Mail nem ellenőrizte a {1} @@ -411,7 +411,7 @@ apps/frappe/frappe/email/receive.py +53,Invalid User Name or Support Password. P DocType: Email Account,Yahoo Mail,Yahoo Mail apps/frappe/frappe/core/page/permission_manager/permission_manager.js +469,Saved!,Mentve! apps/frappe/frappe/desk/page/activity/activity_row.html +17,Updated {0}: {1},Frissítve {0}: {1} -DocType: DocType,Master,Gazda +DocType: DocType,Master,Fő adat DocType: DocType,User Cannot Create,Felhasználó nem hozhat létre apps/frappe/frappe/core/page/user_permissions/user_permissions.js +27,"These will also be set as default values for those links, if only one such permission record is defined.","Ezek is beállítható alapértelmezett értékek azok a kapcsolatok, ha csak egy ilyen engedélyt rekord meghatározott." apps/frappe/frappe/desk/page/activity/activity.js +196,{0} on {1},{0} {1} @@ -437,7 +437,7 @@ eval:doc.age>18","Ez a mező csak akkor jelenik meg, ha a fieldname itt meghatá apps/frappe/frappe/email/doctype/email_alert/email_alert.py +20,Cannot set Email Alert on Document Type {0},Nem lehet beállítani Email Alert on Document Type {0} apps/frappe/frappe/config/website.py +49,Setup of fonts and background.,Beállítás a betűtípusok és háttérrel. DocType: Workflow Action,Workflow Action Master,Workflow Action mester -DocType: Custom Field,Field Type,Mező Típus +DocType: Custom Field,Field Type,Mező típusa apps/frappe/frappe/utils/data.py +397,only.,csak. DocType: Feed,Doc Type,Doc Type apps/frappe/frappe/email/receive.py +49,Invalid Mail Server. Please rectify and try again.,"Érvénytelen Mail Server. Kérjük orvosolja, és próbálja újra." @@ -446,7 +446,7 @@ For Select, enter list of Options, each on a new line.","Mert linkek, adja meg a DocType: Workflow State,film,film apps/frappe/frappe/model/db_query.py +286,No permission to read {0},Nem olvasgatására {0} apps/frappe/frappe/utils/nestedset.py +221,Multiple root nodes not allowed.,Több gyökér csomópont nem engedélyezett. -sites/assets/js/desk.min.js +603,Get,Kap +sites/assets/js/desk.min.js +603,Get,Átmásolás apps/frappe/frappe/custom/doctype/custom_field/custom_field.js +55,Options for select. Each option on a new line. e.g.:
    Option 1
    Option 2
    Option 3
    ,Options for válassza. Minden lehetőség egy új sorba. pl:
    1. lehetőség
    2. lehetőség
    3. lehetőség
    sites/assets/js/desk.min.js +125,Confirm,Erősítse meg DocType: System Settings,yyyy-mm-dd,yyyy-mm-dd @@ -460,8 +460,8 @@ DocType: DocPerm,Set User Permissions,Állítsa felhasználói engedélyek DocType: Email Account,Email Account Name,Email fiók neve apps/frappe/frappe/core/page/permission_manager/permission_manager.js +248,Select Document Types,Válassza ki a dokumentum típusok DocType: Email Account,"e.g. ""Support"", ""Sales"", ""Jerry Yang""","pl. ""Support"", ""Sales"", ""Jerry Yang""" -DocType: User,Facebook User ID,Facebook User ID -DocType: Workflow State,fast-forward,gyors előre- +DocType: User,Facebook User ID,Facebook nyilvános felhasználónév +DocType: Workflow State,fast-forward,gyors-előre apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +1,"Check columns to select, drag to set order.","Ellenőrizze oszlopok kiválasztásához, Húzzon a sorrendben." DocType: Event,Every Day,Minden nap apps/frappe/frappe/email/smtp.py +58,Please setup default Email Account from Setup > Email > Email Account,Kérjük beállítás alapértelmezett e-mail fiók a Setup> E-mail> E-mail fiók @@ -482,7 +482,7 @@ apps/frappe/frappe/templates/includes/list/filters.html +19,clear,világos apps/frappe/frappe/desk/doctype/event/event.py +24,Every day events should finish on the same day.,Minden nap eseményeket kell befejezni az ugyanazon a napon. DocType: Communication,User Tags,Felhasználó címkék DocType: Workflow State,download-alt,download-alt -DocType: Web Page,Main Section,Fő szakasza +DocType: Web Page,Main Section,Fő rész apps/frappe/frappe/core/doctype/doctype/doctype.py +226,{0} not allowed in fieldname {1},{0} nem engedélyezett fieldname {1} DocType: Page,Icon,Ikon DocType: Web Page,Content in markdown format that appears on the main side of your page,"Tartalmat árleszállítás formátumban jelenik meg a fő oldalon az oldal," @@ -497,19 +497,19 @@ DocType: Social Login Keys,Google Client Secret,Google Client Secret apps/frappe/frappe/core/doctype/report/report.js +16,Write a Python file in the same folder where this is saved and return column and result.,"Írj egy Python fájl abban a mappában, ahol ez a rendszer elmenti és visszatér oszlop és az eredmény." DocType: DocType,Sort Field,Rendezés Helytelenül apps/frappe/frappe/templates/pages/404.html +10,"We are very sorry for this, but the page you are looking for is missing (this could be because of a typo in the address) or moved.","Nagyon sajnálom, de az oldal amit keres hiányzik (ez lehet, mert egy elírás a cím), vagy át." -apps/frappe/frappe/core/doctype/doctype/doctype.py +235,Field {0} of type {1} cannot be mandatory,Helytelenül {0} típusú {1} nem kötelező +apps/frappe/frappe/core/doctype/doctype/doctype.py +235,Field {0} of type {1} cannot be mandatory,A {0} mező {1} típusa nem kötelező apps/frappe/frappe/core/page/permission_manager/permission_manager.js +414,If {0} is permitted,Ha {0} megengedett ,Activity,Aktivitás DocType: Note,"Help: To link to another record in the system, use ""#Form/Note/[Note Name]"" as the Link URL. (don't use ""http://"")","Help: utaláshoz újabb rekord a rendszerben, használja a ""# Form / Megjegyzés / [Megjegyzés neve]"", mint a Link URL. (Ne használja a ""http: //"")" apps/frappe/frappe/config/setup.py +185,Add fields to forms.,Új mezők űrlaphoz. apps/frappe/frappe/templates/pages/me.py +14,You need to be logged in to access this page.,"Be kell jelentkezned, hogy az oldal eléréséhez." -DocType: Workflow State,leaf,levél növényen -apps/frappe/frappe/config/desktop.py +60,Installer,Installer +DocType: Workflow State,leaf,levél +apps/frappe/frappe/config/desktop.py +60,Installer,Telepítő sites/assets/js/editor.min.js +113,Insert Link,Link beszúrása DocType: Contact Us Settings,Query Options,Query Options -DocType: Patch Log,Patch Log,Patch Bejelentkezés +DocType: Patch Log,Patch Log,Frissítési napló DocType: Communication,Sent or Received,Küldött vagy fogadott -DocType: DefaultValue,Key,Kulcs +DocType: DefaultValue,Key,Fő apps/frappe/frappe/config/setup.py +54,Report of all document shares,Jelentés az összes dokumentum részvények sites/assets/js/desk.min.js +536,Starred By,Által csillagozott apps/frappe/frappe/templates/pages/update-password.html +22,New Password,Új jelszó @@ -520,11 +520,11 @@ DocType: Report,Is Standard,Alapfelszereltség apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +218,Specify a default value,Adjon meg egy alapértelmezett érték DocType: Website Settings,FavIcon,Favicon DocType: Workflow State,minus-sign,mínusz-jel -sites/assets/js/desk.min.js +182,Not Found,Not Found +sites/assets/js/desk.min.js +182,Not Found,Nem található apps/frappe/frappe/templates/pages/print.py +127,No {0} permission,{0} engedélye DocType: Feed,Login,Bejelentkezés DocType: System Settings,Enable Scheduled Jobs,Engedélyezze ütemezett feladat -apps/frappe/frappe/core/page/data_import_tool/exporter.py +60,Notes:,Megjegyzések: +apps/frappe/frappe/core/page/data_import_tool/exporter.py +60,Notes:,Jegyzetek: sites/assets/js/desk.min.js +507,Markdown,Árleszállítás DocType: DocShare,Document Name,Dokumentum neve DocType: Comment,Comment By,Megjegyezte @@ -540,7 +540,7 @@ DocType: Communication,Phone No.,Telefonszám DocType: Workflow State,fire,tűz DocType: Workflow State,picture,kép apps/frappe/frappe/core/page/user_permissions/user_permissions.js +301,Add A New Restriction,Add új korlátozásnak -DocType: Workflow Transition,Next State,Next State +DocType: Workflow Transition,Next State,Következő állapot sites/assets/js/editor.min.js +119,Align Left (Ctrl/Cmd+L),Balra igazítás (Ctrl / Cmd + L) DocType: User,Block Modules,Blokk modulok DocType: Web Page,Custom CSS,Egyedi CSS @@ -550,9 +550,9 @@ apps/frappe/frappe/utils/csvutils.py +74,Not a valid Comma Separated Value (CSV DocType: Email Account,Default Incoming,Alapértelmezett bejövő DocType: Workflow State,repeat,ismétlés DocType: Website Settings,Banner,Zászló -sites/assets/js/desk.min.js +822,Help on Search,Segítség a Search +sites/assets/js/desk.min.js +822,Help on Search,Segítség a kereséshez DocType: User,Uncheck modules to hide from user's desktop,Szüntesse modulok elrejteni a felhasználó asztalán -DocType: DocType,Hide Copy,Hide Copy +DocType: DocType,Hide Copy,Rejtett másolat apps/frappe/frappe/core/doctype/user/user.js +168,Clear all roles,Egyik Beosztás sem apps/frappe/frappe/model/base_document.py +287,{0} must be unique,{0} egyedinek kell lennie apps/frappe/frappe/permissions.py +171,Row,Sor @@ -566,8 +566,8 @@ sites/assets/js/desk.min.js +507,Edit as {0},"Szerkesztés, mint {0}" sites/assets/js/desk.min.js +824,new type of document, új dokumentum típusa apps/frappe/frappe/core/page/user_permissions/user_permissions.js +194,No User Restrictions found.,Nem használati korlátozások találhatók. apps/frappe/frappe/email/doctype/email_account/email_account_list.js +10,Default Inbox,Alapértelmezett Beérkezett üzenetek -sites/assets/js/desk.min.js +521,Make a new,Készíts egy új -DocType: Print Settings,PDF Page Size,PDF Page Size +sites/assets/js/desk.min.js +521,Make a new,Új +DocType: Print Settings,PDF Page Size,PDF oldalméret sites/assets/js/desk.min.js +852,About,Névjegy apps/frappe/frappe/core/page/data_import_tool/exporter.py +66,"For updating, you can update only selective columns.","Frissítésére, frissítheti csak szelektív oszlopok." sites/assets/js/desk.min.js +870,Attach Document Print,Dokumentum nyomtatás csatolása @@ -578,14 +578,14 @@ DocType: Workflow State,list-alt,list-alt apps/frappe/frappe/templates/pages/update-password.html +69,Password Updated,Jelszó Frissítve apps/frappe/frappe/core/page/modules_setup/modules_setup.js +18,"Select modules to be shown (based on permission). If hidden, they will be hidden for all users.","Válassza ki a modulokat kell feltüntetni (a engedélyével). Ha elrejteni, majd rejtett minden felhasználó számára." DocType: Top Bar Item,Link to the page you want to open,Link az oldalra megnyitni kívánt -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +149,Permissions Updated,Engedélyek Frissítve +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +149,Permissions Updated,Jogosultságok frissítve apps/frappe/frappe/core/doctype/doctype/doctype.py +240,Options requried for Link or Table type field {0} in row {1},Options .Ennek a Link vagy táblázat típusa mező {0} sorban {1} DocType: Report,Query Report,Lekérdezésjelentés DocType: Communication,On,Tovább DocType: User,Set New Password,Új jelszó beállítása -DocType: User,Github User ID,GitHub Felhasználó ID +DocType: User,Github User ID,Github nyilvános felhasználónév DocType: Communication,Chat,Csevegés -apps/frappe/frappe/core/doctype/doctype/doctype.py +231,Fieldname {0} appears multiple times in rows {1},Fieldname {0} többször előforduló sorban {1} +apps/frappe/frappe/core/doctype/doctype/doctype.py +231,Fieldname {0} appears multiple times in rows {1},A {0} mezőnév többször előfordul a {1} sorban DocType: Workflow State,arrow-down,nyíl-le sites/assets/js/desk.min.js +779,Collapse,Összecsuk apps/frappe/frappe/model/delete_doc.py +131,User not allowed to delete {0}: {1},Felhasználó törlése nem engedélyezett {0}: {1} @@ -595,19 +595,19 @@ DocType: Website Settings,Top Bar,Top Bar sites/assets/js/desk.min.js +463,Please save the document before uploading.,"Kérjük, mentse a dokumentumot a feltöltés előtt." apps/frappe/frappe/core/doctype/doctype/doctype.py +292,Fold must come before a Section Break,Fold előtt kell a szakaszban szünet apps/frappe/frappe/core/doctype/user/user.py +374,Not allowed to reset the password of {0},"Nem engedélyezett, hogy a jelszót a {0}" -DocType: Workflow State,hand-down,kézzel le +DocType: Workflow State,hand-down,kéz-le apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0}: Nem állítható mégse beküldése DocType: Website Theme,Theme,Téma DocType: DocType,Is Submittable,Az Submittable apps/frappe/frappe/custom/doctype/property_setter/property_setter.js +7,Value for a check field can be either 0 or 1,Érték a check mező lehet 0 vagy 1 apps/frappe/frappe/model/document.py +475,Could not find {0},Nem található {0} apps/frappe/frappe/core/page/data_import_tool/exporter.py +217,Column Labels:,Oszlop Címkék: -apps/frappe/frappe/model/naming.py +62,Naming Series mandatory,Elnevezése Series kötelező +apps/frappe/frappe/model/naming.py +62,Naming Series mandatory,Sorszámozási csoport kötelező DocType: Social Login Keys,Facebook Client ID,Facebook Client ID -DocType: Workflow State,Inbox,Inbox +DocType: Workflow State,Inbox,Bejövő DocType: Workflow State,Tag,Címke DocType: Custom Script,Script,Forgatókönyv -sites/assets/js/desk.min.js +852,My Settings,Saját beállítások +sites/assets/js/desk.min.js +852,My Settings,Beállításaim DocType: Website Theme,Text Color,Szöveg színe apps/frappe/frappe/website/doctype/web_form/web_form.py +53,Invalid Request,Érvénytelen kérelem sites/assets/js/desk.min.js +366,This form does not have any input,Ez a forma nem rendelkezik input @@ -646,7 +646,7 @@ DocType: Workflow State,step-backward,lépésről-hátra apps/frappe/frappe/utils/boilerplate.py +228,{app_title},{App_title} apps/frappe/frappe/core/page/data_import_tool/exporter.py +65,Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,"Csak a kötelező mezőket szükséges új rekordok. Törölheti a nem kötelező oszlopokat, ha akarod." DocType: Workflow State,text-height,text-magasság -DocType: Workflow State,map-marker,map-marker +DocType: Workflow State,map-marker,térkép-jelölő apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +39,Submit an Issue,Submit észrevételét DocType: Event,Repeat this Event,Ismételje meg ezt az eseményt DocType: DocPerm,Amend,Módosítására @@ -658,7 +658,7 @@ apps/frappe/frappe/model/document.py +376,Record does not exist,Rekord nem léte apps/frappe/frappe/templates/pages/404.html +4,Page missing or moved,Oldal hiányzó vagy áthelyezték sites/assets/js/desk.min.js +479,Open Link,Open Link apps/frappe/frappe/desk/form/load.py +42,Did not load,Nem töltötte be -apps/frappe/frappe/desk/query_report.py +79,Query must be a SELECT,Query kell lennie a SELECT +apps/frappe/frappe/desk/query_report.py +79,Query must be a SELECT,A lekérdezés csak SELECT lehet DocType: Website Settings,Facebook Share,Facebook Megosztás apps/frappe/frappe/utils/file_manager.py +181,File size exceeded the maximum allowed size of {0} MB,Fájlméret meghaladta a maximálisan megengedett méretét {0} MB apps/frappe/frappe/core/doctype/doctype/doctype.py +344,Enter at least one permission row,Adja meg legalább egy engedélyt sorban @@ -669,7 +669,7 @@ apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +16 DocType: Communication,Sender,Feladó DocType: Web Page,Description for search engine optimization.,Leírás kereső optimalizálás. apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +21,Download Blank Template,Üres sablon letöltése -DocType: DocField,In Filter,A Filter +DocType: DocField,In Filter,Szűrőben DocType: Website Theme,Footer Color,Footer Color DocType: Web Page,"Page to show on the website ",Oldal megmutatni a honlapon @@ -683,9 +683,9 @@ apps/frappe/frappe/permissions.py +222,{0} {1} not found,{0} {1} nem található apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +214,Show a description below the field,Leírását mutatja az alábbi terén DocType: Workflow State,align-left,igazítás-balra DocType: User,Defaults,Defaults -sites/assets/js/desk.min.js +555,Merge with existing,Egyesül a meglévő +sites/assets/js/desk.min.js +555,Merge with existing,Meglévővel összefésülni DocType: User,Birth Date,Születési dátum -DocType: Workflow State,fast-backward,Gyorsan hátra +DocType: Workflow State,fast-backward,gyors-vissza DocType: DocShare,DocShare,DocShare DocType: Report,Add Total Row,Összesítő sor hozzáadása apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +19,For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment.,"Például ha törli, és módosítsa INV004 válik egy új dokumentumot INV004-1. Ez segít nyomon követni az egyes módosításokat." @@ -693,7 +693,7 @@ DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - Vá apps/frappe/frappe/core/page/modules_setup/modules_setup.js +5,Show or Hide Modules,Megjelenítése vagy elrejtése modulok DocType: File Data,Attached To DocType,DocType-hoz csatolás apps/frappe/frappe/desk/page/activity/activity.js +153,Aug,Augusztus -DocType: DocField,Int,Int +DocType: DocField,Int,Egész DocType: Currency,"1 Currency = [?] Fraction For e.g. 1 USD = 100 Cent",1 Valuta = [?] Törtet pl 1 USD = 100 Cent apps/frappe/frappe/core/page/permission_manager/permission_manager.js +363,Add New Permission Rule,Add New Engedély szabály @@ -719,7 +719,7 @@ apps/frappe/frappe/templates/emails/new_user.html +3,A new account has been crea apps/frappe/frappe/templates/emails/password_update.html +1,Password Update Notification,Jelszó Update Notification DocType: DocPerm,User Permission DocTypes,Használati Engedély DOCTYPES sites/assets/js/desk.min.js +555,New Name,Új név -sites/assets/js/form.min.js +196,Insert Above,Helyezze felett +sites/assets/js/form.min.js +196,Insert Above,Beszúrás fölé sites/assets/js/list.min.js +21,Not Saved,Nem mentett apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Hagyjuk Felhasználói Ha DocType: Custom Field,Default Value,Alapértelmezett érték @@ -730,12 +730,12 @@ DocType: Workflow State,asterisk,csillag apps/frappe/frappe/core/page/data_import_tool/exporter.py +61,Please do not change the template headings.,"Kérjük, ne módosítsa a sablon megnevezéseket." DocType: Workflow State,shopping-cart,shopping-cart DocType: Social Login Keys,Google,Google -DocType: Workflow State,Inverse,Fordítottja +DocType: Workflow State,Inverse,Inverz DocType: DocField,User permissions should not apply for this Link,Felhasználói jogosultságokat nem kell alkalmazni erre a link apps/frappe/frappe/model/naming.py +90,Invalid naming series (. missing),Érvénytelen elnevezési sorozat (. Hiányzik) DocType: System Settings,Language,Nyelv DocType: DocPerm,Cancel,Mégsem -DocType: Web Page,Page content,Az oldalak tartalma +DocType: Web Page,Page content,Az oldal tartalma apps/frappe/frappe/core/page/data_import_tool/exporter.py +91,Leave blank for new records,Hagyja üresen az új bejegyzések apps/frappe/frappe/config/website.py +79,List of themes for Website.,Listája témák honlapja. sites/assets/js/desk.min.js +852,Logout,Kilépés @@ -745,8 +745,8 @@ DocType: Workflow State,bookmark,könyvjelző DocType: Currency,Symbol,Szimbólum apps/frappe/frappe/model/base_document.py +394,Row #{0}:,Row # {0}: apps/frappe/frappe/core/doctype/user/user.py +80,New password emailed,Új jelszó e-mailben -apps/frappe/frappe/auth.py +198,Login not allowed at this time,Belépni tilos ebben az időben -DocType: DocType,Permissions Settings,Engedélyek Beállítások +apps/frappe/frappe/auth.py +198,Login not allowed at this time,A bejelentkezés tilos ebben az időben +DocType: DocType,Permissions Settings,Jogosultság beállításai sites/assets/js/desk.min.js +836,{0} List,{0} lista apps/frappe/frappe/desk/form/assign_to.py +39,Already in user's To Do list,Már a felhasználó Tennivalók listáján van DocType: Email Account,Enable Outgoing,Engedélyezze a kimenő @@ -759,7 +759,7 @@ DocType: Custom Field,Properties,Tulajdonságok apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +47,"Do not update, but insert new records.","Ne frissíteni, de helyezzen be új rekordot." DocType: DocField,Dynamic Link,Dinamikus link DocType: Property Setter,DocType or Field,DocType vagy Helytelenül -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +3,Quick Help for Setting Permissions,Gyors segítség a jogosultságok beállítása +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +3,Quick Help for Setting Permissions,Segítség a jogosultság beállításaihoz DocType: Report,Report Builder,Report Builder DocType: Workflow,Workflow,Workflow DocType: Workflow State,Upload,Feltöltés @@ -768,7 +768,7 @@ apps/frappe/frappe/website/doctype/blog_post/blog_post_list.js +7,Not Published, apps/frappe/frappe/config/setup.py +168,"Actions for workflow (e.g. Approve, Cancel).",Actions for munkafolyamat (pl jóváhagyja Mégsem). DocType: Workflow State,flag,zászló DocType: Web Page,Text Align,Szöveg igazítása -DocType: Contact Us Settings,Forward To Email Address,Előre e-mail címre +DocType: Contact Us Settings,Forward To Email Address,Továbbítás emailcímekre apps/frappe/frappe/core/doctype/doctype/doctype.py +79,Title field must be a valid fieldname,Cím mezőt kell egy érvényes fieldname DocType: Communication,Archived,Archivált DocType: System Settings,Session Expiry in Hours e.g. 06:00,Session lejárata Óra pl 06:00 @@ -785,14 +785,14 @@ DocType: Website Settings,Disable Customer Signup link in Login page,Vevő felir apps/frappe/frappe/core/report/todo/todo.py +21,Assigned To/Owner,Felelős érte / Tulajdonos DocType: Workflow State,arrow-left,nyíl-balra apps/frappe/frappe/desk/page/applications/application_row.html +5,Installed,Telepített -DocType: Workflow State,fullscreen,fullscreen +DocType: Workflow State,fullscreen,teljes-képernyő DocType: Event,Ref Name,Ref Megnevezés DocType: Web Page,Center,Központ apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +33,Setup > User Permissions Manager,Beállítás> Felhasználói engedélyek menedzser DocType: Workflow Document State,Represents the states allowed in one document and role assigned to change the state.,"Képviseli az államok játszhat egy dokumentumot, és szerepet rendelt változtatni az állam." apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +49,Refresh Form,Frissítés Forma DocType: DocField,Select,Választ -apps/frappe/frappe/utils/csvutils.py +25,File not attached,A fájl nem mellékelt +apps/frappe/frappe/utils/csvutils.py +25,File not attached,A fájl nincs mellékelve DocType: Top Bar Item,"If you set this, this Item will come in a drop-down under the selected parent.","Ha beállítja ezt, ez a tétel jön egy legördülő listát a kiválasztott alapmotor." apps/frappe/frappe/model/db_query.py +389,Please select atleast 1 column from {0} to sort,"Kérjük, válasszon atleast 1 oszlopot {0} rendezni" apps/frappe/frappe/templates/pages/print.py +153,No template found at path: {0},Nem sablon található az úton: {0} @@ -844,7 +844,7 @@ apps/frappe/frappe/model/base_document.py +398,"{0} {1} cannot be ""{2}"". It sh apps/frappe/frappe/core/doctype/user/user.py +156,Password Update,Jelszó frissítése DocType: Workflow State,trash,szemét apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,December -DocType: Event,Leave blank to repeat always,Hagyja üresen megismételni mindig +DocType: Event,Leave blank to repeat always,Üresen hagyva örökké ismétlődik DocType: Event,Ends on,Véget ér apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,Elemet nem lehet hozzáadni a saját leszármazottaik sites/assets/js/form.min.js +270,{0} created this {1},{0} létre ezt a {1} @@ -853,7 +853,7 @@ DocType: Blogger,Short Name,Rövid név DocType: Workflow State,magnet,mágnes apps/frappe/frappe/geo/doctype/currency/currency.js +7,This Currency is disabled. Enable to use in transactions,Ez a valuta van tiltva. Engedélyezze használni tranzakciók DocType: Contact Us Settings,"Default: ""Contact Us""","Default: ""Kapcsolat""" -apps/frappe/frappe/core/page/permission_manager/permission_manager.js +371,"Level 0 is for document level permissions, higher levels for field level permissions.","Level 0 dokumentum szintű engedélyekkel, magasabb szintű terepi szintű engedélyekkel." +apps/frappe/frappe/core/page/permission_manager/permission_manager.js +371,"Level 0 is for document level permissions, higher levels for field level permissions.","A 0. szint dokumentum szinten szabályozza a hozzáférést, a magasabb szintek mező szinten." DocType: Custom Script,Sample,Minta DocType: Event,Every Week,Minden héten DocType: Custom Field,Is Mandatory Field,Kötelező mező @@ -861,14 +861,14 @@ DocType: User,Website User,Weboldal Felhasználó DocType: Website Script,Script to attach to all web pages.,Script tulajdonítanak az összes weboldalt. DocType: Web Form,Allow Multiple,Több engedélyezése sites/assets/js/form.min.js +283,Assign,Rendeljen -apps/frappe/frappe/config/setup.py +93,Import / Export Data from .csv files.,Import / Export származó adatok CSV fájlokat. +apps/frappe/frappe/config/setup.py +93,Import / Export Data from .csv files.,Adatok importálása / exportálása .csv fájlból. DocType: Workflow State,Icon will appear on the button,Ikon jelenik meg a gombot DocType: Web Page,Page url name (auto-generated),Oldal url (automatikusan generált) apps/frappe/frappe/core/page/user_permissions/user_permissions.py +105,Please upload using the same template as download.,"Kérjük, töltsd fel ugyanazt a sablont letöltés." apps/frappe/frappe/modules/__init__.py +81,App not found,App nem találhatók DocType: Workflow State,pencil,ceruza sites/assets/js/form.min.js +277,Share {0} with,Share {0} -DocType: Workflow State,hand-up,kéz-up +DocType: Workflow State,hand-up,kéz-fel DocType: Blog Settings,Writers Introduction,Írók Bevezetés apps/frappe/frappe/core/page/permission_manager/permission_manager.js +140,Select Document Type or Role to start.,Select Document Type vagy Role kezdeni. sites/assets/js/desk.min.js +788,Page not found,Az oldal nem található @@ -894,12 +894,12 @@ apps/frappe/frappe/core/page/data_import_tool/importer.py +175,Not allowed to Im apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +22,Permission Levels,Jogosultsági szintek DocType: Workflow State,Warning,Figyelmeztetés DocType: DocType,In Dialog,A Dialog -apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +142,Help,Segítség -DocType: User,Login Before,Belépés előtt -DocType: Web Page,Insert Style,Insert Stílus +apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +142,Help,Súgó +DocType: User,Login Before,Bejelentkezés előtt +DocType: Web Page,Insert Style,Stílus beszúrása apps/frappe/frappe/desk/page/applications/applications.js +94,Application Installer,Alkalmazás telepítő apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Is,Van -DocType: Workflow State,info-sign,info-jel +DocType: Workflow State,info-sign,infó-jel DocType: Currency,"How should this currency be formatted? If not set, will use system defaults","Hogyan kell ezt a valutát kell formázni? Ha nincs beállítva, akkor használja rendszer alapértelmezett" apps/frappe/frappe/core/page/permission_manager/permission_manager.js +249,Show User Permissions,Mutasd felhasználói engedélyek apps/frappe/frappe/utils/response.py +108,You need to be logged in and have System Manager Role to be able to access backups.,"Be kell lennie jelentkezve, és van System Manager szerepe, hogy képes legyen elérni mentést." @@ -916,8 +916,8 @@ apps/frappe/frappe/core/doctype/user/user.js +45,Refreshing...,Frissítő ... DocType: Event,Starts on,Kezdődik DocType: Workflow State,th,th sites/assets/js/desk.min.js +490,Create a new {0},Hozzon létre egy új {0} -sites/assets/js/desk.min.js +836,Open {0},Nyílt {0} -DocType: Workflow State,ok-sign,OK-jel +sites/assets/js/desk.min.js +836,Open {0},{0} megnyitva +DocType: Workflow State,ok-sign,ok-jel sites/assets/js/form.min.js +158,Duplicate,Másolat apps/frappe/frappe/email/doctype/email_alert/email_alert.py +16,Please specify which value field must be checked,"Kérjük, nevezze meg a értékmező ellenőrizni kell" apps/frappe/frappe/core/page/data_import_tool/exporter.py +69,"""Parent"" signifies the parent table in which this row must be added","""Szülő"" jelenti azt a táblát, amelyhez ezt a sort kell hozzáadni" @@ -926,8 +926,8 @@ sites/assets/js/form.min.js +283,Shared With,Megosztva ,Modules Setup,Modulok beállítása apps/frappe/frappe/core/page/data_import_tool/exporter.py +220,Type:,Típus: apps/frappe/frappe/desk/moduleview.py +57,Module Not Found,Modul nem található -DocType: User,Location,Elhelyezkedés -,Permitted Documents For User,Megengedett dokumentumok Felhasználó +DocType: User,Location,Tartózkodási hely +,Permitted Documents For User,Felhasználónak engedélyezett dokumentumok apps/frappe/frappe/core/doctype/docshare/docshare.py +33,"You need to have ""Share"" permission","Be kell, hogy ""Share"" engedélyt" sites/assets/js/form.min.js +210,Bulk Edit {0},Tömeges szerkesztése {0} DocType: Email Alert Recipient,Email Alert Recipient,Email riasztás címzettje @@ -965,8 +965,8 @@ DocType: Workflow State,chevron-down,Chevron-down DocType: Workflow State,th-list,TH-lista DocType: Web Page,Enable Comments,Megjegyzések engedélyezése DocType: User,Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111),"Korlátozza a felhasználó erről az IP címről csak. Több IP címet is hozzá elválasztva vesszővel. Azt is elfogadja, részleges IP-címeket, mint a (111.111.111)" -DocType: Website Theme,Google Font (Heading),Google betűtípus (Heading) -sites/assets/js/desk.min.js +836,Find {0} in {1},Találja {0} {1} +DocType: Website Theme,Google Font (Heading),Google betűtípus (Fejléc) +sites/assets/js/desk.min.js +836,Find {0} in {1},A {0} keresése ebben: {1} DocType: Email Account,"Append as communication against this DocType (must have fields, ""Status"", ""Subject"")","Hozzáfűzni, mint kommunikációs ellen DocType (kell mezőket, ""Status"", ""Tárgy"")" DocType: DocType,Allow Import via Data Import Tool,Import engedélyezése az Adatok importálása eszközön keresztül apps/frappe/frappe/model/base_document.py +423,Not allowed to change {0} after submission,Nem szabad változtatni {0} benyújtását követően @@ -988,9 +988,9 @@ apps/frappe/frappe/config/setup.py +214,Download Backup,Mentés letöltése sites/assets/js/form.min.js +180,Amending,Módosításáról sites/assets/js/desk.min.js +512,Dialog box to select a Link Value,Párbeszédablakban válassza ki a link Érték DocType: Contact Us Settings,Send enquiries to this email address,Írjon erre a címre -DocType: Letter Head,Letter Head Name,FEJLÉCES név +DocType: Letter Head,Letter Head Name,Levél fejléc neve apps/frappe/frappe/config/website.py +23,User editable form on Website.,Felhasználó által szerkeszthető formában honlap. -DocType: Workflow State,file,akta +DocType: Workflow State,file,Fájl apps/frappe/frappe/model/rename_doc.py +98,You need write permission to rename,Be kell írni engedélye átnevezni apps/frappe/frappe/core/page/permission_manager/permission_manager.js +426,Apply Rule,"Szabályok alkalmazása," DocType: User,Karma,Karma @@ -998,7 +998,7 @@ DocType: DocField,Table,Táblázat DocType: File Data,File Size,Fájlméret apps/frappe/frappe/website/doctype/web_form/web_form.py +87,You must login to submit this form,Be kell jelentkezned küldje el az űrlapot DocType: User,Background Image,Háttérkép -sites/assets/js/form.min.js +261,New Custom Print Format,New Custom Print Format +sites/assets/js/form.min.js +261,New Custom Print Format,Új egyedi nyomtatási forma DocType: DocPerm,Create,Létrehozás DocType: About Us Settings,Org History,Org története DocType: Workflow,Workflow Name,Workflow név @@ -1006,7 +1006,7 @@ DocType: Web Form,Allow Edit,Szerkesztés engedélyezése apps/frappe/frappe/workflow/doctype/workflow/workflow.py +64,Cannot change state of Cancelled Document. Transition row {0},Nem lehet megváltoztatni állapotát Törölt dokumentum. Átmeneti sorban {0} DocType: Workflow,"Rules for how states are transitions, like next state and which role is allowed to change state etc.","Szabályait, hogyan államok átmenetek, mint a következő állam, és milyen szerepet változtathatja állam stb" apps/frappe/frappe/desk/form/save.py +21,{0} {1} already exists,{0} {1} már létezik -DocType: User,Github Username,GitHub név +DocType: User,Github Username,Github felhasználói név DocType: Web Page,Title / headline of your page,Cím / főcíme az oldal DocType: DocType,Plugin,Plugin sites/assets/js/desk.min.js +881,Add Attachments,Melléklet hozzáadása @@ -1023,7 +1023,7 @@ apps/frappe/frappe/desk/doctype/event/event.py +16,Event end must be after start apps/frappe/frappe/templates/includes/sidebar.html +7,Back,Vissza apps/frappe/frappe/desk/query_report.py +21,You don't have permission to get a report on: {0},Nem kell engedélyt kap jelentést: {0} sites/assets/js/desk.min.js +493,Advanced Search,Részletes keresés -apps/frappe/frappe/core/doctype/user/user.py +381,Password reset instructions have been sent to your email,Jelszóvisszaállító utasításokat küldtek az e-mail +apps/frappe/frappe/core/doctype/user/user.py +381,Password reset instructions have been sent to your email,A jelszó visszaállításához szükséges utasítok el lettek küldve emailen apps/frappe/frappe/config/setup.py +223,Manage cloud backups on Dropbox,Kezelése felhő biztonsági mentéseket Dropbox DocType: Workflow,States,Államok DocType: Email Alert,Attach Print,Erősítse Nyomtatás @@ -1031,10 +1031,10 @@ apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +18 apps/frappe/frappe/core/doctype/doctype/doctype.py +37,{0} not allowed in name,{0} nem engedélyezett a névben DocType: Workflow State,circle-arrow-left,kör-nyíl-bal apps/frappe/frappe/sessions.py +106,Redis cache server not running. Please contact Administrator / Tech support,"Redis cache szerver nem fut. Kérjük, forduljon Administrator / Tech support" -sites/assets/js/desk.min.js +823,Make a new record,Készíts egy új rekord +sites/assets/js/desk.min.js +823,Make a new record,Új tétel létrehozása DocType: Currency,Fraction,Töredék sites/assets/js/desk.min.js +464,Select from existing attachments,Válasszon a meglévő mellékleteket -DocType: Custom Field,Field Description,Mező Leírás +DocType: Custom Field,Field Description,Mező leírása apps/frappe/frappe/model/naming.py +49,Name not set via Prompt,Nevet nem állította keresztül Prompt DocType: Note,Note is a free page where users can share documents / notes,"Megjegyzés egy ingyenes oldal, ahol a felhasználók megoszthatják a dokumentumokat / jegyzetek" DocType: Website Theme,Top Bar Color,Top Bar Color @@ -1050,24 +1050,24 @@ DocType: Workflow State,font,betűtípus DocType: Customize Form Field,Is Custom Field,Van Custom Field DocType: Workflow,"If checked, all other workflows become inactive.","Ha be van jelölve, minden más munkafolyamatok inaktívvá válik." apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[Felirat]: [Mező típus] / [Opciók]: [Szélesség] -DocType: Workflow State,folder-close,folder-szoros +DocType: Workflow State,folder-close,mappa-bezárt DocType: Email Alert Recipient,Optional: Alert will only be sent if value is a valid email id.,"Opcionális: Alert csak akkor kerül elküldésre, ha az érték egy érvényes email id." apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} nem szabad átnevezni DocType: Custom Script,Custom Script,Egyedi szkript DocType: ToDo,Assigned To,Felelős érte apps/frappe/frappe/core/doctype/user/user.py +165,Verify Your Account,Igazolni fiókját DocType: Workflow Transition,Action,Művelet -apps/frappe/frappe/core/page/data_import_tool/exporter.py +221,Info:,Info: +apps/frappe/frappe/core/page/data_import_tool/exporter.py +221,Info:,Infó: DocType: Custom Field,Permission Level,Jogosultsági szint DocType: User,Send Notifications for Transactions I Follow,Küldje értesítések Transactions I Follow apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write","{0}: Nem állítható Küldés, Törlés, módosíthatja nélkül írása" apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,Beállítás> Felhasználó apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,Köszönöm sites/assets/js/form.min.js +180,Saving,Megtakarítás -DocType: Print Settings,Print Style Preview,Nyomtatási stílus Preview +DocType: Print Settings,Print Style Preview,Nyomtatvány stílus előnézet DocType: About Us Settings,About Us Settings,Névjegy beállítások DocType: Website Settings,Website Theme,Weboldal Theme -DocType: DocField,In List View,Lista megtekintése +DocType: DocField,In List View,Listanézetben DocType: Email Account,Use TLS,TLS apps/frappe/frappe/email/smtp.py +34,Invalid login or password,Érvénytelen felhasználó vagy jelszó apps/frappe/frappe/config/setup.py +190,Add custom javascript to forms.,Új egyéni JavaScript úrlaphoz. @@ -1082,16 +1082,16 @@ DocType: Email Alert,Email Alert,Email riasztás apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +34,Select Document Types to set which User Permissions are used to limit access.,"Válassza ki a dokumentum típusok állítható be, mely felhasználói engedélyek használnak hozzáférés korlátozására." apps/frappe/frappe/website/doctype/blog_post/blog_post.py +84,Blog,Blog apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} elhagyta a beszélgetést {1} {2} -DocType: Workflow State,hand-right,kézzel jobb +DocType: Workflow State,hand-right,kéz-jobb DocType: Website Settings,Subdomain,Aldomain DocType: Web Form,Allow Delete,Törlés engedélyezése -DocType: Email Alert,Message Examples,Message példák +DocType: Email Alert,Message Examples,Üzenet példák DocType: Web Form,Login Required,Bejelentkezés szükséges apps/frappe/frappe/config/website.py +59,Write titles and introductions to your blog.,Írja címek és bemutatkozás a blog. DocType: Email Account,Notify if unreplied for (in mins),"Értesítés, ha: megválaszolatlan megadása (perc)" apps/frappe/frappe/config/website.py +64,Categorize blog posts.,Kategorizálni blogbejegyzések. DocType: DocField,Attach,Csatolás -DocType: DocType,Permission Rules,Engedély Szabályok +DocType: DocType,Permission Rules,Jogosultsági szabályok sites/assets/js/form.min.js +157,Links,Linkek apps/frappe/frappe/model/base_document.py +322,Value missing for,Érték hiányzik apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}: Beküldte Record nem lehet törölni. @@ -1116,7 +1116,7 @@ DocType: DocType,Name Case,Név Case apps/frappe/frappe/model/base_document.py +318,Data missing in table,Hiányzik az adat a táblából DocType: Web Form,Success URL,A siker URL DocType: Email Account,Append To,Csatolja a -DocType: Workflow Document State,Only Allow Edit For,Csak hogy Edit Kapcsolat +DocType: Workflow Document State,Only Allow Edit For,Csak ő szerkesztheti DocType: DocType,DocType,DocType apps/frappe/frappe/core/doctype/user/user.py +384,User {0} does not exist,Felhasználó {0} nem létezik DocType: Website Theme,"If image is selected, color will be ignored.","Ha kép van kiválasztva, színes figyelmen kívül hagyja." @@ -1141,7 +1141,7 @@ DocType: DocField,Allow on Submit,Hagyjuk a Submit apps/frappe/frappe/core/page/desktop/desktop.js +48,All Applications,Minden alkalmazás DocType: Web Page,Add code as <script>,Add kód & lt; script & gt; apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +7,Select Type,Válasszon típust -apps/frappe/frappe/core/doctype/file_data/file_data.py +42,No permission to write / remove.,Nem írási / remove. +apps/frappe/frappe/core/doctype/file_data/file_data.py +42,No permission to write / remove.,Nincs jogosultság írni / törölni. DocType: Workflow,"All possible Workflow States and roles of the workflow.
    Docstatus Options: 0 is""Saved"", 1 is ""Submitted"" and 2 is ""Cancelled""","Minden lehetséges Workflow Államok és szerepét a munkafolyamat.
    Docstatus Options: 0 ""Saved"", 1 ""be"", és 2. ""Törölt""" apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +3,Drag elements from the sidebar to add. Drag them back to trash.,Drag elemeket az oldalsáv hozzá. Húzza őket vissza a szemetet. DocType: Workflow State,resize-small,átméretezni-small @@ -1151,7 +1151,7 @@ DocType: User,User Type,Felhasználó típus apps/frappe/frappe/core/page/user_permissions/user_permissions.js +68,Select User,Válassza a Felhasználó DocType: Communication,Keep a track of all communications,Hogy a pálya minden kommunikáció apps/frappe/frappe/desk/form/save.py +30,Did not save,Nem mentette -DocType: Property Setter,Property,Ingatlan +DocType: Property Setter,Property,Tulajdonság DocType: Website Slideshow,"Note: For best results, images must be of the same size and width must be greater than height.","Megjegyzés: A legjobb eredmény, a képek kell, hogy legyen az azonos méretű és szélességű nagyobbnak kell lennie, mint a magassága." DocType: DocType,Auto Name,Auto címe apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +169,Permissions can be managed via Setup > Role Permissions Manager,Engedélyek útján lehet irányítani Beállítás & gt; Szerep Engedélyek menedzser @@ -1169,7 +1169,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +549, apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +478,Select Table Columns for {0},Válassza ki a táblázat oszlopok {0} DocType: Custom Field,Options Help,Beállítások Súgó DocType: DocField,Report Hide,Report elrejtése -DocType: Custom Field,Label Help,Label Súgó +DocType: Custom Field,Label Help,Felirat súgó DocType: Workflow State,star-empty,csillagos üres DocType: Workflow State,ok,rendben DocType: User,These values will be automatically updated in transactions and also will be useful to restrict permissions for this user on transactions containing these values.,Ezek az értékek automatikusan frissülnek a tranzakciók és hasznos lesz korlátozni jogosultságait a felhasználó tranzakciókat tartalmazó ezeket az értékeket. @@ -1180,7 +1180,7 @@ apps/frappe/frappe/templates/pages/update-password.html +1,Reset Password,Jelsz DocType: Workflow State,hand-left,kéz-bal apps/frappe/frappe/core/doctype/doctype/doctype.py +277,Fieldtype {0} for {1} cannot be unique,FieldType {0} {1} nem lehet egyedi DocType: Email Account,Use SSL,Use SSL -DocType: Workflow State,play-circle,play-körbe +DocType: Workflow State,play-circle,lejátszás-kör apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +75,Select Print Format to Edit,Válassza ki Print Format Edit DocType: Workflow State,circle-arrow-down,kör-nyíl-le DocType: DocField,Datetime,Datetime @@ -1188,29 +1188,29 @@ DocType: Workflow State,arrow-right,nyíl-jobbra DocType: Workflow State,Workflow state represents the current state of a document.,Munkafolyamat állapota jelenlegi állását mutatja a dokumentum. sites/assets/js/editor.min.js +152,Open Link in a new Window,Link megnyitása új ablakban apps/frappe/frappe/utils/file_manager.py +230,Removed {0},Távolítani {0} -DocType: Company History,Highlight,Fénypont +DocType: Company History,Highlight,Fontos események apps/frappe/frappe/print/doctype/print_format/print_format.py +17,Standard Print Format cannot be updated,Normál Print Format nem lehet frissíteni apps/frappe/frappe/core/doctype/doctype/doctype.py +381,"{0}: Create, Submit, Cancel and Amend only valid at level 0","{0}: Create, Küldés, Törlés és módosítása csak akkor érvényes a 0. szinten" apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +146,Help: Field Properties,Help: Mező tulajdonságok -apps/frappe/frappe/model/document.py +653,Incorrect value in row {0}: {1} must be {2} {3},Helytelen érték sorban {0}: {1} kell {2} {3} +apps/frappe/frappe/model/document.py +653,Incorrect value in row {0}: {1} must be {2} {3},Érvénytelen érték a {0} sorban: a(z) {1} értéke muszáj {2} {3} apps/frappe/frappe/workflow/doctype/workflow/workflow.py +67,Submitted Document cannot be converted back to draft. Transition row {0},"Benyújtott dokumentumot nem lehet visszaalakítani, hogy készítsen. Átmeneti sorban {0}" apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.html +2,Select an existing format to edit or start a new format.,Válasszon ki egy létező formátumot szerkeszteni vagy új formátumban. apps/frappe/frappe/workflow/doctype/workflow/workflow.py +38,Created Custom Field {0} in {1},Alkotó Saját mező {0} {1} apps/frappe/frappe/core/page/user_permissions/user_permissions.js +31,A user can be permitted to multiple records of the same DocType.,"A felhasználó megengedhető, hogy több rekordot az azonos DocType." -DocType: Workflow State,Home,Otthon -DocType: Workflow State,question-sign,kérdés-jel +DocType: Workflow State,Home,Kezdő oldal +DocType: Workflow State,question-sign,kérdőjel DocType: Email Account,Add Signature,Aláírás hozzáadása apps/frappe/frappe/email/doctype/email_unsubscribe/email_unsubscribe.py +13,Left this conversation,Elhagyta ezt a beszélgetést apps/frappe/frappe/core/page/permission_manager/permission_manager.js +467,Did not set,Nem állította be DocType: ToDo,ToDo,ToDo -DocType: DocField,No Copy,No Copy +DocType: DocField,No Copy,Nincs másolat DocType: Workflow State,qrcode,qrcode DocType: Web Form,Breadcrumbs,Zsemlemorzsa apps/frappe/frappe/templates/includes/comments/comments.py +50,{0} by {1},{0} {1} által apps/frappe/frappe/core/doctype/comment/comment.py +39,Cannot add more than 50 comments,Nem vehet fel több mint 50 hozzászólást DocType: Website Settings,Top Bar Items,Top Bar elemek -DocType: Print Settings,Print Settings,Print Settings -DocType: DocType,Max Attachments,Max Mellékletek +DocType: Print Settings,Print Settings,Nyomtatás beállítások +DocType: DocType,Max Attachments,Max. mellékletek száma DocType: Page,Page,Oldal DocType: Workflow State,briefcase,aktatáska apps/frappe/frappe/model/base_document.py +411,Value cannot be changed for {0},Az érték nem változott {0} @@ -1223,12 +1223,12 @@ DocType: Communication,Content,Tartalom DocType: Web Form,Go to this url after completing the form.,Ugrás erre az url után űrlap kitöltésével. DocType: Custom Field,Document,Dokumentum DocType: DocField,Code,Kód -DocType: Website Theme,Footer Text Color,Footer Szöveg színe +DocType: Website Theme,Footer Text Color,Lábléc szöveg színe apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +24,"Permissions at level 0 are Document Level permissions, i.e. they are primary for access to the document.","Engedélyek 0. szinten állnak dokumentum szintű engedélyekkel, azaz ők az elsődleges számára a dokumentumhoz való hozzáférést." -DocType: Print Format,Print Format,Print Format +DocType: Print Format,Print Format,Nyomtatvány sablon apps/frappe/frappe/config/website.py +28,User ID of a blog writer.,Felhasználói azonosító a blog írója. apps/frappe/frappe/config/setup.py +32,Set Permissions on Document Types and Roles,Engedélyek beállítása a dokumentum típusok és szerepek -sites/assets/js/desk.min.js +904,New in version {0},Új verzió {0} +sites/assets/js/desk.min.js +904,New in version {0},Újdonság a(z) {0} verzióban DocType: About Us Settings,"""Company History""","""Cégtörténet""" apps/frappe/frappe/permissions.py +226,Permission already set,Engedély már beállított apps/frappe/frappe/desk/page/activity/activity_row.html +15,Commented on {0}: {1},Megjegyzést fűzött {0}: {1} @@ -1240,10 +1240,10 @@ sites/assets/js/form.min.js +196,Done,Csinált sites/assets/js/form.min.js +286,Reply,Válasz DocType: Communication,By,Által DocType: Email Account,SMTP Server,SMTP Server -DocType: Print Format,Print Format Help,Print Format Súgó +DocType: Print Format,Print Format Help,Nyomtatvány sablon Súgó apps/frappe/frappe/core/page/data_import_tool/exporter.py +70,"If you are updating, please select ""Overwrite"" else existing rows will not be deleted.","Ha aktualizálást, kérjük válassza a ""felülírása"" mást meglévő sorok nem kerülnek törlésre." DocType: Event,Every Month,Minden hónapban -DocType: Letter Head,Letter Head in HTML,FEJLÉCES HTML +DocType: Letter Head,Letter Head in HTML,Levél fejléc HTML-ben DocType: Web Form,Web Form,Web Form DocType: About Us Settings,Org History Heading,Org History Rovat DocType: Web Form,Web Page Link Text,Weboldal linket szöveg @@ -1258,7 +1258,7 @@ DocType: DocPerm,Role and Level,Szerep és Level apps/frappe/frappe/desk/moduleview.py +31,Custom Reports,Egyéni jelentések DocType: Website Script,Website Script,Weboldal Script apps/frappe/frappe/config/setup.py +147,Customized HTML Templates for printing transactions.,Testreszabott HTML sablonok nyomtatáshoz tranzakciókat. -apps/frappe/frappe/desk/form/utils.py +103,No further records,További bejegyzések +apps/frappe/frappe/desk/form/utils.py +103,No further records,Nincs több sor DocType: DocField,Long Text,Hosszú szöveg apps/frappe/frappe/core/page/data_import_tool/importer.py +35,Please do not change the rows above {0},"Kérjük, ne módosítsa a fenti sorokban {0}" sites/assets/js/desk.min.js +852,(Ctrl + G),(Ctrl + G) @@ -1267,26 +1267,26 @@ DocType: Workflow State,bell,csengő sites/assets/js/form.min.js +282,Share this document with,Ossza meg ezt az okmányt apps/frappe/frappe/desk/page/activity/activity.js +152,Jun,Június apps/frappe/frappe/utils/nestedset.py +227,{0} {1} cannot be a leaf node as it has children,{0} {1} nem lehet levélcsomópont hiszen a gyerekek -DocType: Feed,Info,Info +DocType: Feed,Info,Infó apps/frappe/frappe/templates/includes/contact.js +30,Thank you for your message,Köszönjük üzenet -DocType: Website Settings,Home Page,Honlap +DocType: Website Settings,Home Page,Kezdőlap DocType: Email Alert,Filters,Szűrők DocType: Workflow State,share-alt,share-alt DocType: Role,Role Name,Szerep neve DocType: Workflow Document State,Workflow Document State,Workflow dokumentum állam apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +32,"To give acess to a role for only specific records, check the Apply User Permissions. User Permissions are used to limit users with such role to specific records.","Hogy acess szerepe csak konkrét emlékek, jelölje be az Alkalmazás a felhasználói jogosultságok. Felhasználói engedélyek használnak, hogy korlátozza a felhasználók ilyen szerepet adott rekordok." apps/frappe/frappe/workflow/doctype/workflow/workflow.py +70,Cannot cancel before submitting. See Transition {0},Nem lehet törölni benyújtása előtt. Lásd Transition {0} -apps/frappe/frappe/templates/pages/print.py +139,Print Format {0} is disabled,Print Format {0} van tiltva +apps/frappe/frappe/templates/pages/print.py +139,Print Format {0} is disabled,A(z) {0} nyomtatvány sablon le van tiltva DocType: Email Alert,Send days before or after the reference date,Küldd nappal megelőzően vagy azt követően a referencia-időpont DocType: User,Allow user to login only after this hour (0-24),A felhasználó megadhatja a bejelentkezéshez csak ebben az órában (0-24) apps/frappe/frappe/core/doctype/doctype/doctype.py +34,Not in Developer Mode! Set in site_config.json or make 'Custom' DocType.,"Nem fejlesztői módban! Meghatározott site_config.json, vagy hogy ""Custom"" DocType." DocType: Workflow State,globe,földgolyó DocType: System Settings,dd.mm.yyyy,nn.hh.éééé apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +193,Hide field in Standard Print Format,Hide területen Standard Print Format -DocType: DocField,Float,Úszó -DocType: Module Def,Module Name,Modulnevet +DocType: DocField,Float,Lebegőpontos +DocType: Module Def,Module Name,Modul neve DocType: DocType,DocType is a Table / Form in the application.,DocType egy táblázat / a keresetlevélben. -DocType: Feed,Feed Type,Takarmány típusa +DocType: Feed,Feed Type,Hírfolyam típusa DocType: Email Account,GMail,GMail DocType: Customize Form,"Fields separated by comma (,) will be included in the
    Search By list of Search dialog box","Fields vesszővel elválasztva (,) szerepelni fog a
    Keresés listája Keresés párbeszédablak" DocType: Web Page,Template Path,Sablon Path @@ -1309,7 +1309,7 @@ DocType: DocField,Do not allow user to change after set the first time,"Ne enged DocType: User,Third Party Authentication,Harmadik fél Authentication DocType: Website Settings,Banner is above the Top Menu Bar.,Banner felett van a felső menüsor. DocType: User,"Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set ""match"" permission rules. To see list of fields, go to Customize Form.","Írja be alapértelmezett érték mezőkre (billentyűk) és értékeket. Ha hozzá több értéket egy területen, az első kapja el. Ezek az alapértékek is beállítható ""meccs"" engedélyt szabályokat. Ha látni fenti területeken, látogasson el a Customize Forma ." -DocType: Email Account,Port,Kikötő +DocType: Email Account,Port,Port DocType: Website Slideshow,Slideshow like display for the website,"Diavetítés, mint kijelzőn a honlapon" sites/assets/js/editor.min.js +121,Center (Ctrl/Cmd+E),Középre (Ctrl / Cmd + E) apps/frappe/frappe/sessions.py +28,Cache Cleared,Cache Törölve @@ -1319,7 +1319,7 @@ DocType: About Us Settings,More content for the bottom of the page.,További tar sites/assets/js/desk.min.js +191,Session Expired. Logging you out,Lejárt a. Kilépés a következő DocType: Workflow,DocType on which this Workflow is applicable.,DocType amelyeken ez a munkafolyamat alkalmazható. DocType: Blog Category,Category Name,Kategória neve -DocType: Print Settings,PDF Settings,PDF Settings +DocType: Print Settings,PDF Settings,PDF beállítások apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +16,Column Name,Oszlop neve DocType: Web Form,"In JSON as
    [{""title"":""Jobs"", ""name"":""jobs""}]
    ","JSON mint a
     [{""title"": ""Jobs"", ""name"": ""munkahelyek""}] "
     apps/frappe/frappe/core/doctype/doctype/doctype.py +280,Fieldtype {0} for {1} cannot be indexed,FieldType {0} {1} nem indexelt
    @@ -1328,9 +1328,9 @@ DocType: Workflow State,Download,Letöltés
     DocType: Blog Post,Blog Intro,Blog Intro
     apps/frappe/frappe/core/doctype/report/report.js +37,Enable Report,Engedélyezze a jelentés
     DocType: User,Check / Uncheck roles assigned to the User. Click on the Role to find out what permissions that Role has.,"Ellenőrzés / Jel szánt szerep a Felhasználó. Kattintson a szerepe, hogy megtudja, milyen jogokkal ezt a feladatot."
    -DocType: Web Page,Insert Code,Insert Code
    +DocType: Web Page,Insert Code,Kód beszúrása
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +548,You can add dynamic properties from the document by using Jinja templating.,Felveheti dinamikus tulajdonságokat a dokumentumot a Jinja sablonozó.
    -sites/assets/js/desk.min.js +825,List a document type,Sorolja a dokumentum típusát
    +sites/assets/js/desk.min.js +825,List a document type,Adatok listázása
     DocType: Event,Ref Type,Ref Type
     apps/frappe/frappe/core/page/data_import_tool/exporter.py +63,"If you are uploading new records, leave the ""name"" (ID) column blank.","Ha töltesz fel új rekordokat, hagyja a ""name"" (ID) oszlopot üresen."
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +360,No of Columns,Nem oszlopok
    @@ -1359,7 +1359,7 @@ DocType: Blog Category,Blogger,Blogger
     sites/assets/js/desk.min.js +444,Date must be in format: {0},Dátum kell formátum: {0}
     apps/frappe/frappe/core/doctype/doctype/doctype.py +367,"{0}: Only one rule allowed with the same Role, Level and Apply User Permissions","{0}: csak egy szabály engedélyezettek ugyanazt a szerepet, Level és Apply felhasználói engedélyek"
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder_field.html +22,Select Columns,Select oszlopok
    -DocType: Workflow State,folder-open,mappát nyitott
    +DocType: Workflow State,folder-open,mappa-nyitva
     apps/frappe/frappe/core/page/desktop/all_applications_dialog.html +1,Search Application,Keresés Application
     apps/frappe/frappe/config/website.py +18,Single Post (article).,Single Post (cikk).
     DocType: Property Setter,Set Value,Beállított érték
    @@ -1382,13 +1382,13 @@ DocType: Workflow State,chevron-left,Chevron-bal
     DocType: Bulk Email,Sending,Elküldés
     apps/frappe/frappe/auth.py +184,Not allowed from this IP Address,Nem engedélyezett IP címről
     DocType: Website Slideshow,This goes above the slideshow.,Ez a mérték meghaladja a diavetítés.
    -apps/frappe/frappe/config/setup.py +208,Install Applications.,Az alkalmazások telepítése.
    +apps/frappe/frappe/config/setup.py +208,Install Applications.,Alkalmazások telepítése.
     DocType: Event,Private,Magán
     DocType: Print Settings,Send Email Print Attachments as PDF (Recommended),E-mail küldése Nyomtatás Mellékletek PDF (ajánlott)
     DocType: Workflow Action,Workflow Action,Workflow Action
     DocType: Event,Send an email reminder in the morning,E-mail küldése emlékeztető reggel
    -DocType: Blog Post,Published On,Kiadja
    -DocType: Feed,Feed,Takarmány
    +DocType: Blog Post,Published On,Közzétette
    +DocType: Feed,Feed,Hírfolyam
     DocType: ToDo,Reference Type,Referencia típusa
     DocType: Event,Repeat On,Ismétlés Be
     apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +30,User Permissions,Felhasználói engedélyek
    @@ -1397,7 +1397,7 @@ DocType: Workflow State,warning-sign,warning-jel
     DocType: Website Settings,"Show title in browser window as ""Prefix - title""",Cím mutatása a böngészőablakban "előtag - cím"
     DocType: Workflow Document State,Update Value,Frissítés Érték
     DocType: System Settings,Number Format,Szám formátum
    -DocType: Custom Field,Insert After,Helyezze be után
    +DocType: Custom Field,Insert After,Beszúrás utána
     DocType: Social Login Keys,GitHub Client Secret,GitHub Client Secret
     DocType: Report,Report Name,Jelentés neve
     DocType: Email Alert,Save,Save
    @@ -1415,10 +1415,10 @@ apps/frappe/frappe/templates/includes/login/login.js +120,Oops! Something went w
     DocType: Blog Settings,Blog Introduction,Blog Bevezetés
     DocType: User,Email Settings,Email beállítások
     apps/frappe/frappe/workflow/doctype/workflow/workflow.py +57,{0} not a valid State,{0} nem érvényes állapot
    -DocType: Workflow State,ok-circle,ok-körbe
    +DocType: Workflow State,ok-circle,ok-kör
     apps/frappe/frappe/core/doctype/user/user.py +101,Sorry! User should have complete access to their own record.,Elnézést! Felhasználó kell végezni a teljes hozzáférést biztosít a saját rekordot.
     DocType: Custom Field,In Report Filter,A jelentés szűrő
    -DocType: DocType,Hide Actions,Hide Actions
    +DocType: DocType,Hide Actions,Műveletek elrejtése
     DocType: DocType,"\
     
  • field:[fieldname] - By Field\
  • naming_series: - By Naming Series (field called naming_series must be present\ @@ -1427,7 +1427,7 @@ DocType: DocType,"\ ')"">Naming Options"," \
  • mezőben: [fieldname] - A Field \
  • naming_series: - megnevezésével Series (nevű mezőt naming_series jelen kell lennie \
  • Prompt - Prompt felhasználótól a nevét \
  • [sorozat] - Series by előtag (ponttal elválasztva), például PRE . ##### \ ') ""> elnevezése módok " apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +19,Label is mandatory,Label kötelező DocType: Custom Field,Unique,Egyedülálló -DocType: File Data,File Name,File Name +DocType: File Data,File Name,Fájl neve apps/frappe/frappe/core/page/data_import_tool/importer.py +257,Did not find {0} for {0} ({1}),Nem találja {0} {0} ({1}) apps/frappe/frappe/config/setup.py +39,Set Permissions per User,Engedélyek beállítása per Felhasználó DocType: Print Format,Edit Format,Formátum szerkesztése @@ -1435,9 +1435,9 @@ apps/frappe/frappe/templates/emails/new_user.html +6,Complete Registration,A reg apps/frappe/frappe/website/doctype/website_theme/website_theme.py +40,Top Bar Color and Text Color are the same. They should be have good contrast to be readable.,"Top Bar Color és a szöveg színe azonos. Ezeket meg kell, hogy jó kontraszt, hogy olvasható legyen." apps/frappe/frappe/core/page/data_import_tool/exporter.py +67,You can only upload upto 5000 records in one go. (may be less in some cases),"Tölthetsz Akár 5000 rekordok egy menetben. (Kisebb lehet, egyes esetekben)" DocType: Print Settings,Print Style,Nyomtatási stílus -DocType: DocPerm,Import,Import +DocType: DocPerm,Import,Importálás apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +125,Row {0}: Not allowed to enable Allow on Submit for standard fields,Row {0}: Nem szabad engedélyezni Hagyjuk a Submit szabványos mezők -apps/frappe/frappe/config/setup.py +91,Import / Export Data,Import / Export adatok +apps/frappe/frappe/config/setup.py +91,Import / Export Data,Adatok importálása / exportálása sites/assets/js/desk.min.js +904,updated to {0},frissítve: {0} DocType: Workflow State,chevron-right,Chevron-right apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +158,"Change type of field. (Currently, Type change is \ @@ -1451,11 +1451,11 @@ DocType: User,Security Settings,Biztonsági beállítások ,Desktop,Munkaasztal DocType: Web Form,Text to be displayed for Link to Web Page if this form has a web page. Link route will be automatically generated based on `page_name` and `parent_website_route`,"A megjelenítendő szöveget a linket a weblap, ha ebben a formában egy weboldalt. Link útvonal alapján automatikusan generált `` page_name` és parent_website_route`" sites/assets/js/desk.min.js +502,Please set {0} first,"Kérjük, állítsa {0} első" -DocType: Patch Log,Patch,Folt +DocType: Patch Log,Patch,Javítócsomag apps/frappe/frappe/core/page/data_import_tool/importer.py +40,No data found,Nem talált adatok DocType: Web Form,Allow Comments,Megjegyzések engedélyezése DocType: User,Background Style,Háttérkép elrendezése -DocType: System Settings,mm-dd-yyyy,mm-hh-nn +DocType: System Settings,mm-dd-yyyy,hh-nn-éééé apps/frappe/frappe/desk/doctype/feed/feed.py +91,{0} logged in,{0} bejelentkezve apps/frappe/frappe/templates/emails/new_user.html +4,Your login id is,Bejelentkezési azonosítóját van DocType: DocField,Ignore User Permissions,Figyelmen kívül hagyja felhasználói engedélyek diff --git a/frappe/translations/ja.csv b/frappe/translations/ja.csv index a9d46bf825..8b9130565f 100644 --- a/frappe/translations/ja.csv +++ b/frappe/translations/ja.csv @@ -1,5 +1,5 @@ apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +224,Press Esc to close,Escキーを押して閉じる -apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}",新しいタスクは、{0}、{1}によってあなたに割り当てられています。 {2} +apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}",{1}からあなたに新しいタスク{0}が割当されています。 {2} apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,投稿 apps/frappe/frappe/config/setup.py +98,Rename many items by uploading a .csv file.,csvファイルをアップロードすることで多くのアイテムの名前を変更します DocType: Workflow State,pause,休止 @@ -10,7 +10,7 @@ DocType: Bulk Email,Send After,後送信 apps/frappe/frappe/utils/file_manager.py +28,Please select a file or url,ファイルまたはURLを選択してください DocType: DocField,DocField,文書フィールド DocType: Comment,Comment By Fullname,フルネームでのコメント -sites/assets/js/form.min.js +282,Not shared with anyone yet.,まだ誰とでも共有しません。 +sites/assets/js/form.min.js +282,Not shared with anyone yet.,誰とも共有していません DocType: DocField,Options,オプション sites/assets/js/report.min.js +17,Cannot edit standard fields,標準フィールドを編集することはできません DocType: Print Format,Print Format Builder,印刷書式ビルダー @@ -22,7 +22,7 @@ sites/assets/js/desk.min.js +555,Rename {0},名称変更 {0} DocType: Workflow State,zoom-out,ズームアウト apps/frappe/frappe/model/document.py +664,Table {0} cannot be empty,テーブル{0}は空にできません。 DocType: Social Login Keys,GitHub,GitHub -apps/frappe/frappe/model/document.py +638,Beginning with,で始まる +apps/frappe/frappe/model/document.py +638,Beginning with,次の文字で開始: apps/frappe/frappe/core/page/data_import_tool/exporter.py +51,Data Import Template,データのインポートテンプレート sites/assets/js/desk.min.js +536,Parent,親 sites/assets/js/desk.min.js +826,"document type..., e.g. customer",ドキュメントタイプ... 、例えば顧客 @@ -32,14 +32,14 @@ apps/frappe/frappe/core/doctype/doctype/doctype.py +267,Default for 'Check' type DocType: Email Account,Enable Incoming,着信を有効にする DocType: Workflow State,Danger,危険 DocType: Workflow State,th-large,th-large -DocType: Communication,Unread Notification Sent,未読の通知が送信されます +DocType: Communication,Unread Notification Sent,未読通知送信済 sites/assets/js/desk.min.js +708,Export not allowed. You need {0} role to export.,エクスポートは許可されていません。役割{0}を必要とします。 apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +154,Set the display label for the field,フィールドの表示ラベルを設定 apps/frappe/frappe/model/document.py +655,Incorrect value: {0} must be {1} {2},不正な値:{0} は {1} {2}でなければなりません apps/frappe/frappe/config/setup.py +179,"Change field properties (hide, readonly, permission etc.)",変更フィールドのプロパティ(非表示、読み取り専用、アクセス権など) DocType: Workflow State,lock,ロック apps/frappe/frappe/config/website.py +74,Settings for Contact Us Page.,お問い合わせページの設定 -apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,管理者ログに記録されましたで +apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,管理者がログインしました DocType: Contact Us Settings,"Contact options, like ""Sales Query, Support Query"" etc each on a new line or separated by commas.",新しい行またはカンマで区切られた「セールスクエリ、サポートクエリ」などのような連絡先オプション sites/assets/js/editor.min.js +155,Insert,挿入 sites/assets/js/desk.min.js +512,Select {0},{0}を選択 @@ -60,8 +60,8 @@ DocType: DocType,Title Field,タイトルフィールド apps/frappe/frappe/core/doctype/user/user.py +478,"If you think this is unauthorized, please change the Administrator password.",これが不正であると考えられる場合は、管理者パスワードを変更してください。 DocType: Workflow State,eject,イジェクト apps/frappe/frappe/core/page/user_permissions/user_permissions.js +16,Help for User Permissions,ユーザー権限のヘルプ -apps/frappe/frappe/email/bulk.py +78,Unsubscribe link: {0},解除リンク:{0} -DocType: Communication,Visit,観覧/アクセス +apps/frappe/frappe/email/bulk.py +78,Unsubscribe link: {0},登録解除リンク:{0} +DocType: Communication,Visit,来訪 apps/frappe/frappe/desk/page/applications/application_row.html +7,Install,インストール DocType: Website Settings,Twitter Share via,Twitter共有経由 apps/frappe/frappe/config/website.py +33,Embed image slideshows in website pages.,ウェブサイトのページ内に画像のスライドショーを埋め込んでください。 @@ -86,7 +86,7 @@ DocType: Comment,Post Topic,トピック投稿 apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +2,Widths can be set in px or %.,幅はPXまたは%で設定できます。 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +6,Permissions get applied on Users based on what Roles they are assigned.,アクセス権限は、割り当てられている役割に基づいてユーザーに適用されます。 sites/assets/js/desk.min.js +890,You are not allowed to send emails related to this document,この書類に関連するメールを送信することが許可されていません。 -apps/frappe/frappe/website/doctype/website_theme/website_theme.py +30,You are not allowed to delete a standard Website Theme,あなたは、標準的なWebサイトのテーマを削除することは許可されていません +apps/frappe/frappe/website/doctype/website_theme/website_theme.py +30,You are not allowed to delete a standard Website Theme,標準のWebサイトテーマを削除することは許可されていません apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +176,Example,例 DocType: Workflow State,gift,ギフト apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +180,Reqd,要求済 @@ -100,8 +100,8 @@ DocType: Workflow State,chevron-up,山カッコ(上) sites/assets/js/desk.min.js +852,Documentation,文書化 DocType: DocShare,Internal record of document shares,文書共有の内部レコード DocType: Workflow State,Comment,コメント -apps/frappe/frappe/email/bulk.py +120,Email limit {0} crossed,メールの制限{0}交差 -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +17,"You can change Submitted documents by cancelling them and then, amending them.",送信した書類は、取り消し、修正することによって変更することができます。 +apps/frappe/frappe/email/bulk.py +120,Email limit {0} crossed,メールの制限{0}を超えました +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +17,"You can change Submitted documents by cancelling them and then, amending them.",提出した書類は、キャンセルし修正することによって変更することができます DocType: DocField,Display,表示 sites/assets/js/desk.min.js +832,e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)...,例えばある[(55 + 434)/ 4 またはある[=数学。罪(数PI / 2) ... apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +25,"If a Role does not have access at Level 0, then higher levels are meaningless.",「役割」にレベル0のアクセス権が無い場合、より高いレベルには意味がありません。 @@ -122,11 +122,11 @@ DocType: Workflow,Transition Rules,移行ルール apps/frappe/frappe/core/doctype/report/report.js +11,Example:,例: DocType: Workflow,Defines workflow states and rules for a document.,ドキュメントのためのワークフローの状況とルールを定義します。 DocType: DocType,Show this field as title,タイトルとしてこのフィールドを表示 -apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},フィールド名は{0}、{1}などの特殊文字を含めることはできません +apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},フィールド名{0}には、{1}などの特殊文字を含めることはできません apps/frappe/frappe/model/document.py +388,Error: Document has been modified after you have opened it,エラー:あなたが文書を開いた後に変更されています -apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0}:送信可能になっていない場合は、割り当て送信が設定できません +apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0}:提出可能になっていない場合は、割当の提出が設定できません DocType: Social Login Keys,Facebook,Facebook -apps/frappe/frappe/templates/pages/list.py +59,"Filtered by ""{0}""","{0}"によってフィルタリング +apps/frappe/frappe/templates/pages/list.py +59,"Filtered by ""{0}""","""{0}""でフィルタリング" sites/assets/js/desk.min.js +910,Message from {0},{0}からのメッセージ DocType: Blog Settings,Blog Title,ブログのタイトル apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +12,Edit to set heading,見出しを設定して編集 @@ -148,7 +148,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.ht DocType: Website Settings,Add a banner to the site. (small banners are usually good),サイトにバナーを追加します。(通常は小バナーでよいです) DocType: Website Settings,Set Banner from Image,画像からバナーを設定 apps/frappe/frappe/core/doctype/user/user.py +202,User {0} cannot be deleted,ユーザー{0}を削除することはできません -sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,別のトランザクションは、これをブロックしています。数秒後にもう一度お試しください。 +sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,別の取引がこれをブロックしています。数秒後にもう一度お試しください。 DocType: Property Setter,Field Name,フィールド名 sites/assets/js/desk.min.js +684,or,または apps/frappe/frappe/templates/generators/web_form.html +265,Continue,続けます @@ -163,8 +163,8 @@ apps/frappe/frappe/email/smtp.py +169,Unable to send emails at this time,メー sites/assets/js/desk.min.js +852,Search or type a command,検索またはコマンド入力 DocType: Email Account,e.g. smtp.gmail.com,例「smtp.gmail.com」 apps/frappe/frappe/core/page/permission_manager/permission_manager.js +359,Add A New Rule,新しいルールを追加 -apps/frappe/frappe/custom/doctype/custom_field/custom_field.js +52,Name of the Document Type (DocType) you want this field to be linked to. e.g. Customer,このフィールドにリンクしたい文書タイプの名前。(例:顧客) -DocType: User,Roles Assigned,割り当てられた役割 +apps/frappe/frappe/custom/doctype/custom_field/custom_field.js +52,Name of the Document Type (DocType) you want this field to be linked to. e.g. Customer,"このフィールドにリンクしたい文書タイプの名前。(例:""Customer"")" +DocType: User,Roles Assigned,割当された役割 DocType: Top Bar Item,Parent Label,親ラベル apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +10,Permissions are automatically translated to Standard Reports and Searches.,アクセス権限は、自動的に標準レポートおよび検索に変換されます。 DocType: Event,Repeat Till,繰り返し終了 @@ -208,7 +208,7 @@ apps/frappe/frappe/core/doctype/role/role.js +9,Edit Permissions,権限を編集 sites/assets/js/form.min.js +210,Edit via Upload,アップロード経由で編集 DocType: Country,Country Name,国名 DocType: About Us Team Member,About Us Team Member,問い合わせチームメンバーについて -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +5,"Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions.",アクセス権限は、レポート、インポート、エクスポート、印刷、電子メール、および設定ユーザー権限、改正、キャンセル、送信、削除、作成、書き込み、読み出しのような権利を設定することで、役割と文書タイプに設定されています +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +5,"Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions.",権限(閲覧、書込、作成、削除、提出、キャンセル、修正、レポート、インポート、エクスポート、印刷、メール、および設定ユーザー権限設定のような)を設定することで、役割と文書タイプにアクセス権限が設定されます。 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +19,"Apart from Role based Permission Rules, you can apply User Permissions based on DocTypes.",役割に基づく権限ルールとは別に、文書タイプに基づいてユーザーのアクセス許可を適用することができます。 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +23,"These permissions will apply for all transactions where the permitted record is linked. For example, if Company C is added to User Permissions of user X, user X will only be able to see transactions that has company C as a linked value.","これらの権限は、権限レコードがリンクされているすべての取引に適用されます。 例えば、ユーザXのユーザー権限にC社が追加された場合、ユーザXだけがC社にリンクされた取引を見ることができます。" @@ -216,7 +216,7 @@ DocType: Property Setter,ID (name) of the entity whose property is to be set,プ DocType: Website Settings,Website Theme Image Link,ウェブサイトのテーマ画像リンク DocType: Website Settings,Sidebar Items,サイドバーのアイテム DocType: Workflow State,exclamation-sign,感嘆符記号 -DocType: Website Theme,Hide Sidebar,隠すサイドバー +DocType: Website Theme,Hide Sidebar,サイドバーを隠す sites/assets/js/list.min.js +98,Gantt,ガント DocType: About Us Settings,Introduce your company to the website visitor.,ウェブサイトの訪問者にあなたの会社をご紹介します。 apps/frappe/frappe/print/doctype/print_format/print_format.js +14,Please duplicate this to make changes,複製した後、変更してください @@ -224,10 +224,10 @@ DocType: Print Settings,Font Size,フォントサイズ sites/assets/js/desk.min.js +852,Unread Messages,未読メッセージ DocType: Workflow State,facetime-video,FaceTimeのビデオ apps/frappe/frappe/website/doctype/blog_post/blog_post.py +164,1 comment,1コメント -DocType: Email Alert,Days Before,日前まで +DocType: Email Alert,Days Before,事前 apps/frappe/frappe/website/doctype/website_settings/website_settings.js +72,Select a Banner Image first.,はじめにバナー画像を選択してください DocType: Workflow State,volume-down,音量を下げる -DocType: Email Account,Send Notification to,に通知を送信 +DocType: Email Account,Send Notification to,通知送信先 apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +626,Saved,保存済 apps/frappe/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py +28,Please specify doctype,文書タイプを指定してください DocType: Print Format,Format Data,書式データ @@ -236,7 +236,7 @@ apps/frappe/frappe/config/setup.py +47,Check which Documents are readable by a U DocType: User,Reset Password Key,パスワードキーリセット DocType: Email Account,Enable Auto Reply,自動返信を有効にする DocType: Workflow State,zoom-in,ズームアップ -apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,このリストからの退会 +apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,リスト登録解除 apps/frappe/frappe/desk/page/activity/activity.js +153,Sep,9月 DocType: DocField,Width,幅 DocType: Email Account,Notify if unreplied,返信されていない場合に通知 @@ -261,7 +261,7 @@ apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import a DocType: Top Bar Item,"target = ""_blank""","target = ""_blank""" DocType: Workflow State,hdd,ハードディスク apps/frappe/frappe/desk/query_report.py +18,You don't have access to Report: {0},レポートへのアクセス権がありません:{0} -DocType: User,Send Welcome Email,ようこそメールを送信 +DocType: User,Send Welcome Email,ウェルカムメールを送信 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +132,Upload CSV file containing all user permissions in the same format as Download.,ダウンロードと同じ形式で全ユーザーのアクセス許可を含むCSVファイルをアップロードします。 DocType: Feed,Doc Name,文書名 DocType: DocField,Heading,見出し @@ -273,10 +273,10 @@ DocType: Workflow State,indent-left,インデント左 DocType: Currency,Currency Name,通貨名 DocType: Report,Javascript,Javascript DocType: File Data,Content Hash,コンテンツハッシュ -DocType: User,Stores the JSON of last known versions of various installed apps. It is used to show release notes.,店舗の様々なインストール済みのアプリケーションの最後の既知のバージョンのJSON。これは、リリースノートを表示するために使用されます。 -DocType: Website Theme,Google Font (Text),Googleのフォント(テキスト) +DocType: User,Stores the JSON of last known versions of various installed apps. It is used to show release notes.,インストール済アプリケーションの最新バージョンのJSONを保管します。リリースノートを表示するために使用されます。 +DocType: Website Theme,Google Font (Text),Googleフォント(テキスト) apps/frappe/frappe/core/page/permission_manager/permission_manager.js +316,Did not remove,削除されませんでした。 -DocType: Report,Query,質問 +DocType: Report,Query,クエリー DocType: DocType,Sort Order,並び順 apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},「リスト表示」は行{1}のタイプ{0}では許可されません DocType: Custom Field,Select the label after which you want to insert new field.,新たなフィールドを挿入後にラベルを選択してください。 @@ -288,7 +288,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_s DocType: Custom Field,Adds a custom field to a DocType,文書タイプにカスタムフィールドを追加 sites/assets/js/editor.min.js +103,Bold (Ctrl/Cmd+B),太字(Ctrl/Cmd+B) apps/frappe/frappe/core/page/user_permissions/user_permissions.js +140,Upload and Sync,アップロード・同期 -sites/assets/js/form.min.js +274,Shared with {0},{0}と共用 +sites/assets/js/form.min.js +274,Shared with {0},{0}と共有 DocType: DocType,Single Types have only one record no tables associated. Values are stored in tabSingles,シングルタイプにテーブルが関連付けられていない唯一のレコードがあります。値はtabSinglesに格納されています DocType: Bulk Email,Bulk Email,一括メール送信 DocType: Workflow,Rules defining transition of state in the workflow.,ワークフローの状態遷移を定義するルール @@ -320,7 +320,7 @@ apps/frappe/frappe/templates/emails/new_user.html +5,Click on the link below to apps/frappe/frappe/core/page/permission_manager/permission_manager.js +396,Did not add,追加しませんでした DocType: Contact Us Settings,Contact Us Settings,お問い合わせの設定 DocType: Workflow State,text-width,テキスト幅 -DocType: Email Alert,View Properties (via Customize Form),(フォームのカスタマイズを介して)ビューのプロパティ +DocType: Email Alert,View Properties (via Customize Form),ビュー属性(カスタマイズフォーム経由) DocType: Website Settings,Sidebar,サイドバー apps/frappe/frappe/core/doctype/report/report.js +5,Report Builder reports are managed directly by the report builder. Nothing to do.,レポートビルダのレポートは、レポートビルダーによって直接管理されています。何もする必要がありません。 apps/frappe/frappe/website/doctype/web_page/web_page.py +30,Cannot edit templated page,テンプレートページを編集することはできません @@ -335,7 +335,7 @@ DocType: DocPerm,Role,役割 apps/frappe/frappe/utils/data.py +380,Cent,セント apps/frappe/frappe/config/setup.py +104,Manage uploaded files.,アップロードされたファイルを管理します。 apps/frappe/frappe/config/setup.py +163,"States for workflow (e.g. Draft, Approved, Cancelled).",ワークフローの状態(例:ドラフト・承認・キャンセル) -sites/assets/js/desk.min.js +522,Set Quantity,設定数量 +sites/assets/js/desk.min.js +522,Set Quantity,数量を設定 ,Data Import Tool,データインポートツール apps/frappe/frappe/core/doctype/user/user.py +369,Registration Details Emailed.,登録の詳細は電子メールで送信しました。 DocType: DocType,Is Single,シングル @@ -348,14 +348,14 @@ DocType: About Us Settings,Company Introduction,会社紹介 DocType: DocPerm,Apply User Permissions,ユーザーのアクセス許可を適用 DocType: User,Modules HTML,モジュールHTML sites/assets/js/desk.min.js +403,Missing Values Required,欠損値が必要です -sites/assets/js/list.min.js +105,{0} is not set,{0}に設定されていません +sites/assets/js/list.min.js +105,{0} is not set,{0}が設定されていません apps/frappe/frappe/permissions.py +168,Not allowed to access {0} with {1} = {2},{0} {1} = {2}を使用してアクセスすることはできません -apps/frappe/frappe/templates/emails/print_link.html +2,View this in your browser,お使いのブラウザでこれを見る +apps/frappe/frappe/templates/emails/print_link.html +2,View this in your browser,ブラウザで表示 DocType: DocType,Search Fields,検索フィールド sites/assets/js/desk.min.js +892,Email sent to {0},{0}に送信された電子メール DocType: Event,Event,イベント sites/assets/js/desk.min.js +901,"On {0}, {1} wrote:",{0}で{1}が記述: -apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +80,Cannot delete standard field. You can hide it if you want,標準のフィールドを削除することはできません。必要に応じて、それを隠すことができます +apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +80,Cannot delete standard field. You can hide it if you want,標準のフィールドを削除することはできません。必要に応じて非表示にできます DocType: Top Bar Item,For top bar,トップバー用 DocType: Print Settings,In points. Default is 9.,ポイント(デフォルトは9) sites/assets/js/editor.min.js +123,Reduce indent (Shift+Tab),インデントを減らす(Shift + Tabキー) @@ -371,8 +371,8 @@ apps/frappe/frappe/core/page/user_permissions/user_permissions.js +217,Select Us apps/frappe/frappe/desk/page/applications/applications.js +24,No Apps Installed,アプリがインストールされていません apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +181,Mark the field as Mandatory,フィールドに「必須」をマーク DocType: User,Google User ID,GoogleのユーザーID -apps/frappe/frappe/desk/form/utils.py +66,This method can only be used to create a Comment,この方法は、コメントを作成するために使用することができ -apps/frappe/frappe/config/setup.py +195,Add custom forms.,カスタムフォームを追加します。 +apps/frappe/frappe/desk/form/utils.py +66,This method can only be used to create a Comment,この方法は、コメントの作成に使用できます +apps/frappe/frappe/config/setup.py +195,Add custom forms.,カスタムフォームを追加 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +9,The system provides many pre-defined roles. You can add new roles to set finer permissions.,このシステムは、多くの事前定義された役割を提供しています。細かい権限を設定するための新しい役割を追加することができます。 DocType: Country,Geo,地理 DocType: Blog Category,Blog Category,ブログカテゴリー @@ -391,8 +391,8 @@ DocType: Communication,Sender Full Name,送信者フルネー​​ム apps/frappe/frappe/desk/query_report.py +75,Must specify a Query to run,実行するクエリを指定する必要があります apps/frappe/frappe/config/setup.py +66,"Language, Date and Time settings",言語、日付と時刻の設定 DocType: User,Represents a User in the system.,システム内のユーザーを表します。 -apps/frappe/frappe/desk/form/assign_to.py +114,"The task {0}, that you assigned to {1}, has been closed.",タスク{0}、あなたは{1}、閉じられたに割り当てられていること。 -DocType: User,Modules Access,モジュールへのアクセス +apps/frappe/frappe/desk/form/assign_to.py +114,"The task {0}, that you assigned to {1}, has been closed.",{1}に割当されていたタスク{0}は、クローズされています +DocType: User,Modules Access,モジュールアクセス DocType: Print Format,Print Format Type,印刷書式タイプ sites/assets/js/desk.min.js +841,Open Source Applications for the Web,Web用のオープンソースアプリケーション DocType: DocType,Hide Toolbar,ツールバーを非表示にする @@ -417,7 +417,7 @@ apps/frappe/frappe/desk/page/activity/activity_row.html +17,Updated {0}: {1},更 DocType: DocType,Master,マスター DocType: DocType,User Cannot Create,ユーザーが作成できません。 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +27,"These will also be set as default values for those links, if only one such permission record is defined.",権限レコードが定義されている場合のみ、リンクがデフォルト値として設定されます。 -apps/frappe/frappe/desk/page/activity/activity.js +196,{0} on {1},{0} {1} +apps/frappe/frappe/desk/page/activity/activity.js +196,{0} on {1},{0} on {1} DocType: Customize Form,Enter Form Type,フォームタイプを入力してください sites/assets/js/desk.min.js +917,Updated To New Version,新しいバージョンに更新 DocType: DocField,Depends On,依存関係 @@ -448,7 +448,7 @@ apps/frappe/frappe/utils/data.py +397,only.,のみ。 DocType: Feed,Doc Type,文書タイプ apps/frappe/frappe/email/receive.py +49,Invalid Mail Server. Please rectify and try again.,無効なメールサーバです。修正してもう一度やり直してください。 DocType: DocField,"For Links, enter the DocType as range. -For Select, enter list of Options, each on a new line.",リンクについては、範囲としてDOCTYPEを入力します。選択のために、それぞれが新しい行に、オプションのリストを入力します。 +For Select, enter list of Options, each on a new line.",リンクには、範囲として文書タイプを入力します。選択には、それぞれ新しい行に、オプションのリストを入力します。 DocType: Workflow State,film,フィルム apps/frappe/frappe/model/db_query.py +286,No permission to read {0},{0}を読むための権限がありません apps/frappe/frappe/utils/nestedset.py +221,Multiple root nodes not allowed.,複数のルートノードは許可されていません。 @@ -482,7 +482,7 @@ sites/assets/js/desk.min.js +519,No Results,結果がありません DocType: System Settings,Security,セキュリティ DocType: Currency,**Currency** Master,「通貨」マスター DocType: Website Settings,Address and other legal information you may want to put in the footer.,住所やその他の法的情報(フッターに配置するなど) -sites/assets/js/list.min.js +102,Starred By Me,自分で主演 +sites/assets/js/list.min.js +102,Starred By Me,自分で☆ apps/frappe/frappe/core/page/permission_manager/permission_manager.js +48,Select Document Type,文書タイプを選択 apps/frappe/frappe/utils/nestedset.py +201,Cannot delete {0} as it has child nodes,子ノードがあるため、{0}を削除することはできません apps/frappe/frappe/templates/includes/list/filters.html +19,clear,クリア @@ -506,11 +506,11 @@ DocType: DocType,Sort Field,並べ替えフィールド apps/frappe/frappe/templates/pages/404.html +10,"We are very sorry for this, but the page you are looking for is missing (this could be because of a typo in the address) or moved.","大変申し訳ありませんが、このページは存在しません (アドレスのタイプミスの可能性があります)" apps/frappe/frappe/core/doctype/doctype/doctype.py +235,Field {0} of type {1} cannot be mandatory,フィールド{0}の型{1}は必須にすることはできません -apps/frappe/frappe/core/page/permission_manager/permission_manager.js +414,If {0} is permitted,{0}は許可されている場合 -,Activity,アクティビティ +apps/frappe/frappe/core/page/permission_manager/permission_manager.js +414,If {0} is permitted,{0}が許可されている場合 +,Activity,活動 DocType: Note,"Help: To link to another record in the system, use ""#Form/Note/[Note Name]"" as the Link URL. (don't use ""http://"")","ヘルプ:システム内の別のレコードにリンクするには、「#フォーム/備考/ [名前をメモ]「リンクのURLとして使用します。 (「http:// ""を使用しないでください)" apps/frappe/frappe/config/setup.py +185,Add fields to forms.,フォームにフィールドを追加。 -apps/frappe/frappe/templates/pages/me.py +14,You need to be logged in to access this page.,このページにアクセスするにはログインする必要があります。 +apps/frappe/frappe/templates/pages/me.py +14,You need to be logged in to access this page.,このページにアクセスするにはログインする必要があります DocType: Workflow State,leaf,リーフ apps/frappe/frappe/config/desktop.py +60,Installer,インストーラ sites/assets/js/editor.min.js +113,Insert Link,リンクの挿入 @@ -552,14 +552,14 @@ DocType: Workflow Transition,Next State,次の状態 sites/assets/js/editor.min.js +119,Align Left (Ctrl/Cmd+L),左寄せ(Ctrl/Cmd+ L) DocType: User,Block Modules,ブロックモジュール DocType: Web Page,Custom CSS,カスタムCSS -sites/assets/js/form.min.js +285,Add a comment,コメントを追加します +sites/assets/js/form.min.js +285,Add a comment,コメントを追加 apps/frappe/frappe/config/setup.py +229,Log of error on automated events (scheduler).,自動化されたイベント(スケジューラ)のエラーログ。 apps/frappe/frappe/utils/csvutils.py +74,Not a valid Comma Separated Value (CSV File),有効なカンマ区切り値(CSVファイル)がありません DocType: Email Account,Default Incoming,デフォルト収益 DocType: Workflow State,repeat,繰り返し DocType: Website Settings,Banner,バナー sites/assets/js/desk.min.js +822,Help on Search,検索のヘルプ -DocType: User,Uncheck modules to hide from user's desktop,チェックを外したモジュールは、ユーザーのデスクトップから非表示にします +DocType: User,Uncheck modules to hide from user's desktop,モジュールのチェックを外し、ユーザーのデスクトップから非表示にする DocType: DocType,Hide Copy,コピーを非表示にする apps/frappe/frappe/core/doctype/user/user.js +168,Clear all roles,すべての役割をクリア apps/frappe/frappe/model/base_document.py +287,{0} must be unique,{0}は重複出来ません @@ -569,10 +569,10 @@ apps/frappe/frappe/desk/page/activity/activity.js +152,Apr,4月 apps/frappe/frappe/custom/doctype/custom_field/custom_field.js +58,Fieldname which will be the DocType for this link field.,このリンクフィールドのDocTypeになるフィールド名。 DocType: User,Email Signature,メール署名 DocType: Website Settings,Google Analytics ID,GoogleアナリティクスID -DocType: Website Theme,Link to your Bootstrap theme,あなたのブートストラップのテーマへのリンク +DocType: Website Theme,Link to your Bootstrap theme,Bootstrapテーマへのリンク sites/assets/js/desk.min.js +507,Edit as {0},{0}で編集 sites/assets/js/desk.min.js +824,new type of document,ドキュメントの新しい タイプ -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +194,No User Restrictions found.,いいえユーザー制限が見つかりませんでした。 +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +194,No User Restrictions found.,ユーザー制限がありません apps/frappe/frappe/email/doctype/email_account/email_account_list.js +10,Default Inbox,デフォルト受信トレイ sites/assets/js/desk.min.js +521,Make a new,新規作成 DocType: Print Settings,PDF Page Size,PDFページサイズ @@ -581,7 +581,7 @@ apps/frappe/frappe/core/page/data_import_tool/exporter.py +66,"For updating, you sites/assets/js/desk.min.js +870,Attach Document Print,文書印刷を添付 DocType: Social Login Keys,Google Client ID,GoogleのClient ID apps/frappe/frappe/core/doctype/user/user.py +63,Adding System Manager to this User as there must be atleast one System Manager,少なくとも1システムマネージャーが存在しなければならないものとして、このユーザにシステムマネージャーの追加 -apps/frappe/frappe/desk/doctype/todo/todo.py +17,Assigned to {0},{0}に割り当て +apps/frappe/frappe/desk/doctype/todo/todo.py +17,Assigned to {0},{0}に割当 DocType: Workflow State,list-alt,リスト(別種) apps/frappe/frappe/templates/pages/update-password.html +69,Password Updated,パスワード更新 apps/frappe/frappe/core/page/modules_setup/modules_setup.js +18,"Select modules to be shown (based on permission). If hidden, they will be hidden for all users.","(権限に基づいて)表示するモジュールを選択します。 @@ -602,12 +602,12 @@ DocType: Website Settings,Linked In Share,共有リンク sites/assets/js/desk.min.js +536,Last Updated On,最終更新日 DocType: Website Settings,Top Bar,トップバー sites/assets/js/desk.min.js +463,Please save the document before uploading.,アップロードする前に書類を保存してください -apps/frappe/frappe/core/doctype/doctype/doctype.py +292,Fold must come before a Section Break,セクション区切りの前に来なければならない折りたたみ +apps/frappe/frappe/core/doctype/doctype/doctype.py +292,Fold must come before a Section Break,フォールドはセクション区切りの前に来なければなりません apps/frappe/frappe/core/doctype/user/user.py +374,Not allowed to reset the password of {0},{0}のパスワードをリセットすることはできません DocType: Workflow State,hand-down,手(下) -apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0}:送信せずにキャンセルを設定することはできません +apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0}:提出せずにキャンセルを設定することはできません DocType: Website Theme,Theme,テーマ -DocType: DocType,Is Submittable,送付可能 +DocType: DocType,Is Submittable,提出可能 apps/frappe/frappe/custom/doctype/property_setter/property_setter.js +7,Value for a check field can be either 0 or 1,チェックフィールドの値は0か1のどちらかです apps/frappe/frappe/model/document.py +475,Could not find {0},見つけることができませんでした{0} apps/frappe/frappe/core/page/data_import_tool/exporter.py +217,Column Labels:,列ラベル: @@ -635,7 +635,7 @@ apps/frappe/frappe/website/doctype/web_page/web_page.py +158,Website Search,ウ DocType: DocField,Mandatory,必須 apps/frappe/frappe/core/doctype/doctype/doctype.py +356,{0}: No basic permissions set,{0}:基本的なアクセス権が設定されていません apps/frappe/frappe/utils/backups.py +140,Download link for your backup will be emailed on the following email address: {0},バックアップのダウンロードリンクは、次のメールアドレスに送信されます:{0} -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +14,"Meaning of Submit, Cancel, Amend",送信、キャンセル、修正の意味 +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +14,"Meaning of Submit, Cancel, Amend",提出、キャンセル、修正の意味 apps/frappe/frappe/desk/doctype/todo/todo_list.js +7,To Do,やることリスト sites/assets/js/editor.min.js +94,Paragraph,段落 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +133,Any existing permission will be deleted / overwritten.,既存のアクセス権は消去/上書きされます。 @@ -644,7 +644,7 @@ DocType: Workflow State,book,本 DocType: Website Settings,Landing Page,ランディングページ apps/frappe/frappe/core/page/permission_manager/permission_manager.js +162,No Permissions set for this criteria.,この条件には権限が設定されていません。 apps/frappe/frappe/config/setup.py +120,Setup Email Alert based on various criteria.,様々な基準に基づいてメールでの警告をセットアップします。 -apps/frappe/frappe/website/doctype/blog_post/blog_post.py +93,Posts filed under {0},{0}の下に提出投稿 +apps/frappe/frappe/website/doctype/blog_post/blog_post.py +93,Posts filed under {0},{0}配下の投稿 DocType: Email Alert,Send alert if date matches this field's value,日付がこのフィールドの値と一致した場合にアラートを送信 DocType: Workflow,Transitions,移行 DocType: User,Login After,ログイン後 @@ -658,7 +658,7 @@ apps/frappe/frappe/utils/boilerplate.py +228,{app_title},{app_title} apps/frappe/frappe/core/page/data_import_tool/exporter.py +65,Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,新しいレコードには必須フィールドのみが必要です。非必須の列は削除することができます。 DocType: Workflow State,text-height,text-height DocType: Workflow State,map-marker,マップマーカー -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +39,Submit an Issue,課題を送信 +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +39,Submit an Issue,課題を投稿 DocType: Event,Repeat this Event,このイベントを繰り返し DocType: DocPerm,Amend,修正 apps/frappe/frappe/templates/includes/login/login.js +43,Valid Login id required.,有効なログインIDが必要です。 @@ -675,11 +675,11 @@ apps/frappe/frappe/utils/file_manager.py +181,File size exceeded the maximum all apps/frappe/frappe/core/doctype/doctype/doctype.py +344,Enter at least one permission row,少なくとも1の許可の行を入力してください sites/assets/js/desk.min.js +536,Created On,作成 DocType: Workflow State,align-center,中央寄せ -sites/assets/js/form.min.js +282,Can Write,書くことができます +sites/assets/js/form.min.js +282,Can Write,書込可能 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +16,"Certain documents, like an Invoice, should not be changed once final. The final state for such documents is called Submitted. You can restrict which roles can Submit.","一部の文書(例:請求書)は、一回で最終変更すべきではありません。文書の最終的な状態は「提出」と呼ばれています。 「提出」は「役割」によって制限することができます。" DocType: Communication,Sender,送信者 -DocType: Web Page,Description for search engine optimization.,検索エンジン最適化のために説明。 +DocType: Web Page,Description for search engine optimization.,検索エンジン最適化(SEO)用の説明文 apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +21,Download Blank Template,空のテンプレートをダウンロード DocType: DocField,In Filter,フィルター内 DocType: Website Theme,Footer Color,フッターの色 @@ -701,7 +701,7 @@ DocType: Workflow State,fast-backward,早戻し DocType: DocShare,DocShare,文書共有 DocType: Report,Add Total Row,合計行を追加 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +19,For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment.,例えば、あなたがINV004をキャンセルして修正した場合、新しいドキュメントINV004-1になります。これによって各修正を追跡するのに役立ちます。 -DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - ドラフト; 1 - 投稿; 2 - キャンセル +DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - ドラフト; 1 - 提出済; 2 - キャンセル apps/frappe/frappe/core/page/modules_setup/modules_setup.js +5,Show or Hide Modules,モジュール表示/非表示 DocType: File Data,Attached To DocType,文書タイプに添付 apps/frappe/frappe/desk/page/activity/activity.js +153,Aug,8月 @@ -711,8 +711,8 @@ For e.g. 1 USD = 100 Cent",1通貨= [?] 例:1米ドル= [ 100 ] セント apps/frappe/frappe/core/page/permission_manager/permission_manager.js +363,Add New Permission Rule,新しいアクセス許可ルールの追加 sites/assets/js/desk.min.js +512,You can use wildcard %,ワイルドカード(%)を使用することができます apps/frappe/frappe/desk/page/activity/activity.js +152,Mar,3月 -sites/assets/js/desk.min.js +768,"Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed",画像の拡張子(.GIF、.JPG、.JPEG、.TIFF、.PNG、.SVG)許可のみ -apps/frappe/frappe/website/doctype/website_theme/website_theme.py +35,Please Duplicate this Website Theme to customize.,このウェブサイトのテーマをカスタマイズするために重複してください。 +sites/assets/js/desk.min.js +768,"Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed",画像拡張子(.gif、.jpg、.jpeg、.tiff、.png、.svg)のみ許可 +apps/frappe/frappe/website/doctype/website_theme/website_theme.py +35,Please Duplicate this Website Theme to customize.,ウェブサイトのテーマをカスタマイズするには複製してください DocType: DocField,Text Editor,テキストエディタ apps/frappe/frappe/config/website.py +69,Settings for About Us Page.,会社概要ページの設定 apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +531,Edit Custom HTML,カスタムHTMLを編集 @@ -726,14 +726,14 @@ DocType: DocPerm,Write,書き込む apps/frappe/frappe/core/doctype/report/report.py +29,Only Administrator allowed to create Query / Script Reports,クエリー/スクリプトレポートを作成することができるのは管理者だけです sites/assets/js/form.min.js +180,Updating,更新 sites/assets/js/desk.min.js +870,Select Attachments,添付ファイルを選択 -sites/assets/js/form.min.js +283,Attach File,ファイルを添付する +sites/assets/js/form.min.js +283,Attach File,ファイルを添付 apps/frappe/frappe/templates/emails/new_user.html +3,A new account has been created for you,新しいアカウントを作成しました apps/frappe/frappe/templates/emails/password_update.html +1,Password Update Notification,パスワード更新通知 DocType: DocPerm,User Permission DocTypes,ユーザー権限の文書タイプ sites/assets/js/desk.min.js +555,New Name,新しい名前 -sites/assets/js/form.min.js +196,Insert Above,上記挿入 +sites/assets/js/form.min.js +196,Insert Above,上に挿入 sites/assets/js/list.min.js +21,Not Saved,保存されていません -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,場合は、ユーザーを許可します +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,許可ユーザー DocType: Custom Field,Default Value,デフォルト値 DocType: Workflow Document State,Update Field,フィールド更新 apps/frappe/frappe/email/doctype/email_account/email_account.py +237,Leave this conversation,この会話を残します @@ -749,7 +749,7 @@ DocType: System Settings,Language,言語 DocType: DocPerm,Cancel,キャンセル DocType: Web Page,Page content,ページ内容 apps/frappe/frappe/core/page/data_import_tool/exporter.py +91,Leave blank for new records,新規レコードの場合は空白のままにします -apps/frappe/frappe/config/website.py +79,List of themes for Website.,ウェブサイトのテーマのリスト。 +apps/frappe/frappe/config/website.py +79,List of themes for Website.,ウェブサイトのテーマのリスト sites/assets/js/desk.min.js +852,Logout,ログアウト apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +26,Permissions at higher levels are Field Level permissions. All Fields have a Permission Level set against them and the rules defined at that permissions apply to the field. This is useful in case you want to hide or make certain field read-only for certain Roles.,"より高いレベルでの権限は、フィールドレベルの権限です。すべてのフィールドはそれぞれ、設定権限レベルと権限がフィールドに適用されることで定義されたルールがあります。 これは、特定の役割のための読み取り専用フィールドを非表示にしたり作成したりする場合に便利です。" @@ -769,10 +769,10 @@ sites/assets/js/desk.min.js +852,Report an Issue,課題をレポート apps/frappe/frappe/email/doctype/email_account/email_account_list.js +14,Default Sending,デフォルトの送信 DocType: Workflow State,volume-off,無音 DocType: Custom Field,Properties,属性 -apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +47,"Do not update, but insert new records.",更新が、新しいレコードを挿入しないでください。 +apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +47,"Do not update, but insert new records.",更新ではなく新しいレコードを挿入してください DocType: DocField,Dynamic Link,動的リンク DocType: Property Setter,DocType or Field,文書タイプまたはフィールド -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +3,Quick Help for Setting Permissions,アクセス権設定のクイックヘルプ +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +3,Quick Help for Setting Permissions,権限設定のクイックヘルプ DocType: Report,Report Builder,レポートビルダ DocType: Workflow,Workflow,ワークフロー DocType: Workflow State,Upload,アップロード @@ -795,7 +795,7 @@ apps/frappe/frappe/core/page/permission_manager/permission_manager.js +54,Select apps/frappe/frappe/model/delete_doc.py +200,Deleted,削除済 DocType: Workflow State,adjust,調整する DocType: Website Settings,Disable Customer Signup link in Login page,ログインページの顧客の登録リンクを無効にする -apps/frappe/frappe/core/report/todo/todo.py +21,Assigned To/Owner,所有者に割り当て +apps/frappe/frappe/core/report/todo/todo.py +21,Assigned To/Owner,所有者に割当 DocType: Workflow State,arrow-left,左矢印 apps/frappe/frappe/desk/page/applications/application_row.html +5,Installed,設置済 DocType: Workflow State,fullscreen,フルスクリーン @@ -809,12 +809,12 @@ apps/frappe/frappe/utils/csvutils.py +25,File not attached,ファイルが添付 DocType: Top Bar Item,"If you set this, this Item will come in a drop-down under the selected parent.",これを設定すると、このアイテムは選択された親の下にあるドロップダウンにあらわれます。 apps/frappe/frappe/model/db_query.py +389,Please select atleast 1 column from {0} to sort,ソートする{0}から少なくとも1列を選択してください apps/frappe/frappe/templates/pages/print.py +153,No template found at path: {0},テンプレートが次のパスに見つかりません:{0} -DocType: Website Settings,"Menu items in the Top Bar. For setting the color of the Top Bar, go to selected Website Theme.",トップバーのメニュー項目。トップバーの色を設定するために、選択されたウェブサイトのテーマに移動します。 -apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +53,Submit after importing.,インポート後に送信してください。 +DocType: Website Settings,"Menu items in the Top Bar. For setting the color of the Top Bar, go to selected Website Theme.",トップバーのメニュー項目。トップバーの色を設定するには、選択されたウェブサイトのテーマに移動します +apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +53,Submit after importing.,インポート後に提出 DocType: Blogger,Avatar,アバター DocType: Blogger,Posts,投稿 sites/assets/js/desk.min.js +896,Dear,親愛なる 様 -sites/assets/js/report.min.js +2,Tip: Double click cell to edit,ヒント:ダブルクリックしてセル編集します +sites/assets/js/report.min.js +2,Tip: Double click cell to edit,ヒント:ダブルクリックしてセルを編集します DocType: ToDo,Description and Status,説明とステータス DocType: Web Page,HTML for header section. Optional,(オプション)ヘッダー部分のHTML。 apps/frappe/frappe/core/doctype/userrole/userrole.py +14,Role exists,役割が存在します @@ -826,9 +826,9 @@ DocType: Workflow State,Style,スタイル apps/frappe/frappe/website/doctype/blog_post/blog_post.py +166,{0} comments,{0} コメント DocType: Customize Form Field,Label and Type,ラベルとタイプ DocType: Workflow State,forward,転送 -sites/assets/js/form.min.js +270,{0} edited this {1},{0} {1}これを編集しました +sites/assets/js/form.min.js +270,{0} edited this {1},{0}がこの {1}を編集 DocType: Web Page,Custom Javascript,カスタムJavaScript -DocType: DocPerm,Submit,送信 +DocType: DocPerm,Submit,提出 DocType: Website Settings,Sub-domain provided by erpnext.com,erpnext.comが提供するサブドメイン DocType: System Settings,dd-mm-yyyy,dd-mm-yyyy apps/frappe/frappe/desk/query_report.py +69,Must have report permission to access this report.,このレポートにアクセスするには、レポートの権限が必要です。 @@ -849,7 +849,7 @@ apps/frappe/frappe/core/page/modules_setup/modules_setup.js +55,There were error apps/frappe/frappe/desk/doctype/todo/todo.js +22,Close,閉じる apps/frappe/frappe/model/document.py +412,Cannot change docstatus from 0 to 2,文書ステータスを0から2に変更することはできません apps/frappe/frappe/core/doctype/doctype/doctype.py +244,Options must be a valid DocType for field {0} in row {1},フィールド{0}行{1}のオプションは有効な文書型でなければなりません -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +159,Edit Properties,プロパティを編集します +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +159,Edit Properties,プロパティ編集 DocType: Patch Log,List of patches executed,実行されるパッチのリスト DocType: Communication,Communication Medium,通信メディア DocType: Website Settings,Banner HTML,バナーのHTML @@ -860,8 +860,8 @@ apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,12月 DocType: Event,Leave blank to repeat always,常に繰り返す場合は空白のままにします DocType: Event,Ends on,終了 apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,アイテムは自身の子孫に追加することはできません -sites/assets/js/form.min.js +270,{0} created this {1},{0} {1}これを作成 -apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.",あなたは{1}、{2}によって閉鎖されているに割り当てたタスク{0}、。 +sites/assets/js/form.min.js +270,{0} created this {1},{0}がこの {1}を作成 +apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.",{1}に割当されていたタスク{0}は、{2}によってクローズされています DocType: Blogger,Short Name,略名 DocType: Workflow State,magnet,マグネット apps/frappe/frappe/geo/doctype/currency/currency.js +7,This Currency is disabled. Enable to use in transactions,この通貨は無効になっています。取引内で使用可能にすることが出来ます @@ -873,14 +873,14 @@ DocType: Custom Field,Is Mandatory Field,必須フィールド DocType: User,Website User,ウェブサイトのユーザー DocType: Website Script,Script to attach to all web pages.,全てのWebページに添付するためのスクリプト DocType: Web Form,Allow Multiple,複数の許可 -sites/assets/js/form.min.js +283,Assign,割り当てます +sites/assets/js/form.min.js +283,Assign,割当 apps/frappe/frappe/config/setup.py +93,Import / Export Data from .csv files.,CSVファイルからのインポート/エクスポートデータ。 DocType: Workflow State,Icon will appear on the button,アイコンがボタン上に表示されます DocType: Web Page,Page url name (auto-generated),ページURL名(自動生成された) apps/frappe/frappe/core/page/user_permissions/user_permissions.py +105,Please upload using the same template as download.,ダウンロードしたものと同じテンプレートを使用してアップロードしてください。 apps/frappe/frappe/modules/__init__.py +81,App not found,アプリケーションが見つかりません DocType: Workflow State,pencil,鉛筆 -sites/assets/js/form.min.js +277,Share {0} with,シェア{0}と +sites/assets/js/form.min.js +277,Share {0} with,{0}と共有 DocType: Workflow State,hand-up,手(上) DocType: Blog Settings,Writers Introduction,作家紹介 apps/frappe/frappe/core/page/permission_manager/permission_manager.js +140,Select Document Type or Role to start.,開始する文書タイプまたは役割を選択してください @@ -890,14 +890,14 @@ DocType: Website Slideshow,Slideshow Items,スライドショーアイテム apps/frappe/frappe/model/delete_doc.py +153,Cannot delete or cancel because {0} {1} is linked with {2} {3},{0} {1}が{2} {3}とリンクされているため、削除するか、キャンセルすることはできません DocType: Website Settings,Twitter Share,Twitterで共有 DocType: Workflow State,Workflow State,ワークフローの状態 -apps/frappe/frappe/templates/pages/me.html +1,My Account,マイアカウント +apps/frappe/frappe/templates/pages/me.html +1,My Account,自分のアカウント apps/frappe/frappe/templates/emails/password_reset.html +4,Please click on the following link to set your new password,新しいパスワードを設定するには、次のリンクをクリックしてください -DocType: Email Alert,Days After,日後 +DocType: Email Alert,Days After,後日 DocType: Contact Us Settings,Settings for Contact Us Page,お問い合わせページ設定 DocType: Custom Script,Script Type,スクリプトタイプ DocType: Email Account,Footer,フッター apps/frappe/frappe/utils/verified_command.py +38,Invalid Link,無効なリンク -DocType: Web Page,Show Title,ショーのタイトル +DocType: Web Page,Show Title,タイトルを表示 DocType: Property Setter,Property Type,属性タイプ DocType: Workflow State,screenshot,スクリーンショット apps/frappe/frappe/core/doctype/report/report.py +24,Only Administrator can save a standard report. Please rename and save.,標準レポートを保存することができるのは管理者だけです。名前を変更し、保存してください。 @@ -920,9 +920,9 @@ sites/assets/js/desk.min.js +522,Added {0} ({1}),追加された{0}({1}) apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +253,Fieldtype cannot be changed from {0} to {1} in row {2},行{2}のフィールドタイプは{0}から{1}に変更することはできません apps/frappe/frappe/core/doctype/doctype/doctype.py +304,Search Fields should contain valid fieldnames,検索フィールドには、有効なフィールド名が含まれている必要があります apps/frappe/frappe/core/doctype/user/user.js +323,Role Permissions,役割の権限 -sites/assets/js/form.min.js +282,Can Read,読むことができます +sites/assets/js/form.min.js +282,Can Read,閲覧可能 DocType: Standard Reply,Response,応答 -sites/assets/js/form.min.js +282,Can Share,共有することができます +sites/assets/js/form.min.js +282,Can Share,共有可能 apps/frappe/frappe/email/smtp.py +37,Invalid recipient address,無効な受信者のアドレス DocType: Workflow State,step-forward,進む apps/frappe/frappe/core/doctype/user/user.js +45,Refreshing...,再読込しています... @@ -935,7 +935,7 @@ sites/assets/js/form.min.js +158,Duplicate,複製 apps/frappe/frappe/email/doctype/email_alert/email_alert.py +16,Please specify which value field must be checked,チェックする必要がある値フィールドを指定してください apps/frappe/frappe/core/page/data_import_tool/exporter.py +69,"""Parent"" signifies the parent table in which this row must be added",「親」は、この行を追加する必要のある親テーブルを意味します DocType: Website Theme,Apply Style,スタイルを適用 -sites/assets/js/form.min.js +283,Shared With,と共有 +sites/assets/js/form.min.js +283,Shared With,共有済 ,Modules Setup,モジュールのセットアップ apps/frappe/frappe/core/page/data_import_tool/exporter.py +220,Type:,タイプ: apps/frappe/frappe/desk/moduleview.py +57,Module Not Found,モジュールが見つかりません @@ -948,7 +948,7 @@ DocType: About Us Settings,Settings for the About Us Page,会社概要ページ apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +5,Select Type of Document to Download,ダウンロードする文書タイプを選択 apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +185,Use the field to filter records,レコードをフィルタリングするためにフィールドを使用 DocType: Email Account,Outlook.com,Outlook.com -DocType: System Settings,Scheduler Last Event,スケジューラの最後のイベント +DocType: System Settings,Scheduler Last Event,スケジューラの最新イベント DocType: Website Settings,Add Google Analytics ID: eg. UA-89XXX57-1. Please search help on Google Analytics for more information.,Google AnalyticsのIDを追加します(例:UA-89XXX57-1)。詳細については、Google Analyticsのヘルプを検索してください。 DocType: Email Alert Recipient,"Expression, Optional",(オプション)表現 DocType: Email Account,Check this to pull emails from your mailbox,自分のメールボックスからメールを受信する場合チェック @@ -973,7 +973,7 @@ DocType: Workflow State,ban-circle,×印 DocType: Event,Desk,デスク apps/frappe/frappe/core/doctype/report/report.js +8,Write a SELECT query. Note result is not paged (all data is sent in one go).,SELECTクエリを書き込んでください。結果はページングされない(全データが1度に返却される)ことに注意してください。 DocType: Email Account,Attachment Limit (MB),添付ファイルの制限(MB) -sites/assets/js/form.min.js +196,Ctrl + Down,Ctrlキー+↓ +sites/assets/js/form.min.js +196,Ctrl + Down,Ctrl+↓ DocType: User,User Defaults,ユーザーデフォルト DocType: Workflow State,chevron-down,山カッコ(下) DocType: Workflow State,th-list,th-list @@ -981,7 +981,7 @@ DocType: Web Page,Enable Comments,コメントを有効にする DocType: User,Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111),"このIPアドレスのみからアクセス可能とします。 複数のIPアドレスは、カンマで区切ることにより追加することができます。 また、部分的なIPアドレスも指定可能です(例:111.111.111)" -DocType: Website Theme,Google Font (Heading),Googleのフォント(見出し) +DocType: Website Theme,Google Font (Heading),Googleフォント(見出し) sites/assets/js/desk.min.js +836,Find {0} in {1},{0} {1}で見つける DocType: Email Account,"Append as communication against this DocType (must have fields, ""Status"", ""Subject"")",この文書タイプに対するコミュニケーションの追加(「ステータス」「件名」のフィールドを持っている必要があります) DocType: DocType,Allow Import via Data Import Tool,データインポートツールを使用したインポートを許可 @@ -990,7 +990,7 @@ DocType: Comment,Comment Type,コメントタイプ apps/frappe/frappe/config/setup.py +8,Users,ユーザー DocType: Email Account,Signature,署名 apps/frappe/frappe/config/website.py +84,"Enter keys to enable login via Facebook, Google, GitHub.",Facebook・Google・GitHub経由でログインするためのキーを入力してください。 -sites/assets/js/list.min.js +67,Add a tag,タグを追加します +sites/assets/js/list.min.js +67,Add a tag,タグを追加 sites/assets/js/desk.min.js +475,Please attach a file first.,ファイルを添付してください apps/frappe/frappe/model/naming.py +156,"There were some errors setting the name, please contact the administrator",名前の設定でいくつかエラーが発生しました。管理者に連絡してください。 DocType: Website Slideshow Item,Website Slideshow Item,ウェブサイトのスライドショーアイテム @@ -999,9 +999,9 @@ DocType: Blog Post,Email Sent,メール送信済 sites/assets/js/desk.min.js +870,Send As Email,電子メールとして送信 DocType: Website Theme,Link Color,リンク色 apps/frappe/frappe/core/doctype/user/user.py +47,User {0} cannot be disabled,ユーザー{0}無効にすることはできません -apps/frappe/frappe/core/doctype/user/user.py +470,"Dear System Manager,",親愛なるシステムマネージャ、 +apps/frappe/frappe/core/doctype/user/user.py +470,"Dear System Manager,",システムマネージャーさん apps/frappe/frappe/config/setup.py +214,Download Backup,ダウンロードバックアップ -sites/assets/js/form.min.js +180,Amending,改正 +sites/assets/js/form.min.js +180,Amending,修正 sites/assets/js/desk.min.js +512,Dialog box to select a Link Value,リンク値を選択するためのダイアログボックス DocType: Contact Us Settings,Send enquiries to this email address,このメールアドレスに問い合わせを送信 DocType: Letter Head,Letter Head Name,レターヘッドの名前 @@ -1014,7 +1014,7 @@ DocType: DocField,Table,テーブル DocType: File Data,File Size,ファイル サイズ apps/frappe/frappe/website/doctype/web_form/web_form.py +87,You must login to submit this form,このフォームを送信するにはログインしてください DocType: User,Background Image,背景画像 -sites/assets/js/form.min.js +261,New Custom Print Format,新しいカスタムプリントフォーマット +sites/assets/js/form.min.js +261,New Custom Print Format,新しいカスタム印刷フォーマット DocType: DocPerm,Create,作成 DocType: About Us Settings,Org History,沿革 DocType: Workflow,Workflow Name,ワークフロー名 @@ -1030,7 +1030,7 @@ DocType: Workflow State,signal,信号 DocType: DocType,Show Print First,まず印刷を表示 DocType: Print Settings,Monochrome,モノクロ DocType: Workflow,"Different ""States"" this document can exist in. Like ""Open"", ""Pending Approval"" etc.",このドキュメントには異なる「ステータス」を入れることができます。(「オープン」「承認待ち」など) -apps/frappe/frappe/utils/verified_command.py +39,This link is invalid or expired. Please make sure you have pasted correctly.,このリンクは無効または期限切れです。あなたが正しく貼り付けられていることを確認してください。 +apps/frappe/frappe/utils/verified_command.py +39,This link is invalid or expired. Please make sure you have pasted correctly.,このリンクは無効または期限切れです。正しく貼り付けられていることを確認してください DocType: Web Form,Web Form Fields,Webフォームフィールド DocType: Website Theme,Top Bar Text Color,トップバーのテキストの色 apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +366,Remove Section,セクションを削除 @@ -1041,7 +1041,7 @@ apps/frappe/frappe/desk/query_report.py +21,You don't have permission to get a r sites/assets/js/desk.min.js +493,Advanced Search,詳細検索 apps/frappe/frappe/core/doctype/user/user.py +381,Password reset instructions have been sent to your email,パスワードのリセット手順をメールで送信しました apps/frappe/frappe/config/setup.py +223,Manage cloud backups on Dropbox,Dropboxのクラウドバックアップを管理 -DocType: Workflow,States,都道府県 +DocType: Workflow,States,状態 DocType: Email Alert,Attach Print,印刷を添付 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +18,"When you Amend a document after Cancel and save it, it will get a new number that is a version of the old number.",キャンセル後に書類を修正・保存した場合、その書類には新規の番号が付与されます。 apps/frappe/frappe/core/doctype/doctype/doctype.py +37,{0} not allowed in name,{0}は名前に使用できません @@ -1061,25 +1061,25 @@ DocType: Country,Time Zones,時間帯 DocType: Workflow State,remove-sign,削除記号 apps/frappe/frappe/config/setup.py +158,Define workflows for forms.,フォームのワークフローを定義します DocType: Website Settings,Misc,その他 -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +155,Start new Format,新しいフォーマットを開始します +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +155,Start new Format,新しいフォーマットを開始 DocType: Workflow State,font,フォント -DocType: Customize Form Field,Is Custom Field,カスタムフィールドは、 +DocType: Customize Form Field,Is Custom Field,カスタムフィールド DocType: Workflow,"If checked, all other workflows become inactive.",チェックすると、他のすべてのワークフローが非アクティブになります。 apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[ラベル]:[フィールドタイプ] / [オプション]:[幅] DocType: Workflow State,folder-close,フォルダを閉じる DocType: Email Alert Recipient,Optional: Alert will only be sent if value is a valid email id.,(オプション)値が有効なメールIDである場合にのみアラートが送信されます。 apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0}の名前は変更できません DocType: Custom Script,Custom Script,カスタムスクリプト -DocType: ToDo,Assigned To,割り当て先 +DocType: ToDo,Assigned To,割当先 apps/frappe/frappe/core/doctype/user/user.py +165,Verify Your Account,アカウントを確認 DocType: Workflow Transition,Action,アクション apps/frappe/frappe/core/page/data_import_tool/exporter.py +221,Info:,情報: DocType: Custom Field,Permission Level,権限レベル -DocType: User,Send Notifications for Transactions I Follow,私は、次のとおりトランザクションの通知を送信 -apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write",{0}:書き込みせずに送信・キャンセル・修正を設定することはできません +DocType: User,Send Notifications for Transactions I Follow,次の取引の通知を送信 +apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write",{0}:書き込みせずに提出・キャンセル・修正を設定することはできません apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,[設定]> [ユーザー apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,ありがとうございます -sites/assets/js/form.min.js +180,Saving,節約 +sites/assets/js/form.min.js +180,Saving,保存 DocType: Print Settings,Print Style Preview,印刷スタイルプレビュー DocType: About Us Settings,About Us Settings,会社の設定について DocType: Website Settings,Website Theme,ウェブサイトのテーマ @@ -1088,7 +1088,7 @@ DocType: Email Account,Use TLS,TLSを使用 apps/frappe/frappe/email/smtp.py +34,Invalid login or password,無効なログインまたはパスワード apps/frappe/frappe/config/setup.py +190,Add custom javascript to forms.,フォームへのカスタムJavaScriptを追加します。 ,Role Permissions Manager,役割権限マネージャー -DocType: Website Theme,This must be checked if the below style settings are applicable,以下のスタイル設定が適用される場合、これはチェックする必要があります +DocType: Website Theme,This must be checked if the below style settings are applicable,以下のスタイル設定が適用される場合、チェックを入れる必要があります apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +111,Name of the new Print Format,新しい印刷形式の名前 apps/frappe/frappe/core/page/data_import_tool/exporter.py +219,Mandatory:,必須: ,User Permissions Manager,ユーザー権限マネージャー @@ -1104,18 +1104,18 @@ DocType: Web Form,Allow Delete,削除を許可する DocType: Email Alert,Message Examples,メッセージの例 DocType: Web Form,Login Required,ログインが必要 apps/frappe/frappe/config/website.py +59,Write titles and introductions to your blog.,あなたのブログにタイトルと紹介文を記載してください。 -DocType: Email Account,Notify if unreplied for (in mins),返信されていない場合は(分で)のために通知 +DocType: Email Account,Notify if unreplied for (in mins),返信されていない場合に通知(分) apps/frappe/frappe/config/website.py +64,Categorize blog posts.,ブログの記事を分類。 DocType: DocField,Attach,添付する DocType: DocType,Permission Rules,権限ルール -sites/assets/js/form.min.js +157,Links,リンクス +sites/assets/js/form.min.js +157,Links,リンク apps/frappe/frappe/model/base_document.py +322,Value missing for,値の記入漏れ -apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}:送信済レコードを削除することはできません。 +apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}:提出済レコードを削除することはできません。 DocType: DocPerm,Read,読む apps/frappe/frappe/templates/pages/update-password.html +18,Old Password,以前のパスワード -apps/frappe/frappe/website/doctype/blog_post/blog_post.py +97,Posts by {0},{0}でポスト +apps/frappe/frappe/website/doctype/blog_post/blog_post.py +97,Posts by {0},投稿 {0} apps/frappe/frappe/core/doctype/report/report.js +9,"To format columns, give column labels in the query.",カラムを設定するには、クエリ内にカラムラベルを付与します -apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0}:送信可能になっていない場合は、割り当て修正が設定できません +apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0}:提出可能になっていない場合は、割当の修正が設定できません apps/frappe/frappe/core/page/user_permissions/user_permissions.js +14,Edit Role Permissions,役割権限を編集 DocType: Social Login Keys,Social Login Keys,ソーシャルログインキー DocType: Comment,Comment Date,コメント日付 @@ -1127,7 +1127,7 @@ DocType: DocType,Child Tables are shown as a Grid in other DocTypes.,子テー DocType: Website Settings,"If checked, the Home page will be the default Item Group for the website.",チェックすると「ホームページ」は、Webサイトのデフォルトのアイテムグループになります。 DocType: Blog Post,"Description for listing page, in plain text, only a couple of lines. (max 140 characters)",一覧ページの説明(最大2行・140文字・プレーンテキストのみ) sites/assets/js/desk.min.js +852,Forums,フォーラム -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,ユーザー制限を追加します。 +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,ユーザー制限を追加 DocType: DocType,Name Case,名入れ apps/frappe/frappe/model/base_document.py +318,Data missing in table,表に不足しているデータ DocType: Web Form,Success URL,成功URL @@ -1135,7 +1135,7 @@ DocType: Email Account,Append To,追加 DocType: Workflow Document State,Only Allow Edit For,編集のみ可 DocType: DocType,DocType,文書タイプ apps/frappe/frappe/core/doctype/user/user.py +384,User {0} does not exist,ユーザー{0}は存在しません -DocType: Website Theme,"If image is selected, color will be ignored.",画像が選択された場合、色は無視されます。 +DocType: Website Theme,"If image is selected, color will be ignored.",画像が選択された場合、色は無視されます DocType: Top Bar Item,Top Bar Item,トップバーアイテム apps/frappe/frappe/utils/csvutils.py +50,"Unknown file encoding. Tried utf-8, windows-1250, windows-1252.",未知の文字コードです。utf-8・Windows-1250・Windows-1252ではありませんでした。 apps/frappe/frappe/core/doctype/user/user.py +103,Sorry! Sharing with Website User is prohibited.,「ウェブサイトユーザー」と共有する権限がありません。 @@ -1153,7 +1153,7 @@ DocType: DocField,Set non-standard precision for a Float or Currency field,浮 DocType: Email Account,Ignore attachments over this size,このサイズ以上の添付ファイルを無視 apps/frappe/frappe/database.py +217,Too many writes in one request. Please send smaller requests,1リクエスト内に記入が多すぎます。リクエストを小さくして送信してください DocType: Workflow State,arrow-up,上矢印 -DocType: DocField,Allow on Submit,送信を許可 +DocType: DocField,Allow on Submit,提出を許可 apps/frappe/frappe/core/page/desktop/desktop.js +48,All Applications,全てのアプリケーション DocType: Web Page,Add code as <script>,<script>としてコード追加 apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +7,Select Type,タイプを選択 @@ -1173,15 +1173,15 @@ DocType: DocType,Auto Name,自動命名 apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +169,Permissions can be managed via Setup > Role Permissions Manager,権限は、設定>役割権限マネージャー で管理することができます apps/frappe/frappe/core/page/data_import_tool/importer.py +67,Please make sure that there are no empty columns in the file.,空のカラムがファイル内に存在しないことを確認してください。 sites/assets/js/desk.min.js +600,You have unsaved changes in this form. Please save before you continue.,この書式に保存されていない変更事項があります。継続する前に、保存してください。 -apps/frappe/frappe/core/doctype/doctype/doctype.py +269,Default for {0} must be an option,{0}のデフォルトはオプションである必要があります +apps/frappe/frappe/core/doctype/doctype/doctype.py +269,Default for {0} must be an option,{0}のデフォルトはオプションでなければなりません DocType: User,User Image,ユーザー画像 apps/frappe/frappe/email/bulk.py +176,Emails are muted,メールはミュートされました -sites/assets/js/form.min.js +196,Ctrl + Up,Ctrlキー+↑ +sites/assets/js/form.min.js +196,Ctrl + Up,Ctrl+↑ DocType: Website Theme,Heading Style,見出しスタイル apps/frappe/frappe/desk/page/applications/applications.py +34,You cannot install this app,このアプリケーションをインストールすることはできません DocType: Scheduler Log,Error,エラー apps/frappe/frappe/model/document.py +480,Cannot link cancelled document: {0},キャンセルされた文書をリンクすることはできません:{0} -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +549,"For example: If you want to include the document ID, use {0}",例:あなたが文書IDを含める場合、使用{0} +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +549,"For example: If you want to include the document ID, use {0}",例:文書IDを含める場合、{0}を使用 apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +478,Select Table Columns for {0},{0}のテーブル列を選択 DocType: Custom Field,Options Help,オプションのヘルプ DocType: DocField,Report Hide,レポート非表示 @@ -1191,10 +1191,10 @@ DocType: Workflow State,ok,OK DocType: User,These values will be automatically updated in transactions and also will be useful to restrict permissions for this user on transactions containing these values.,これらの値は自動的に処理の段階で更新され、また取引にこの値が含まれているユーザーの権限を制限するのに役立つでしょう。 apps/frappe/frappe/desk/page/applications/application_row.html +15,Publisher,パブリッシャー sites/assets/js/desk.min.js +752,Browse,ブラウズ -apps/frappe/frappe/templates/includes/comments/comments.py +52,View it in your browser,お使いのブラウザで表示します +apps/frappe/frappe/templates/includes/comments/comments.py +52,View it in your browser,ブラウザで表示 apps/frappe/frappe/templates/pages/update-password.html +1,Reset Password,パスワード再設定 DocType: Workflow State,hand-left,手(左) -apps/frappe/frappe/core/doctype/doctype/doctype.py +277,Fieldtype {0} for {1} cannot be unique,FIELDTYPE {0} {1}で一意であることができないために +apps/frappe/frappe/core/doctype/doctype/doctype.py +277,Fieldtype {0} for {1} cannot be unique,{1}のFIELDTYPE {0}は一意にすることができません DocType: Email Account,Use SSL,SSLを使用 DocType: Workflow State,play-circle,play-circle apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +75,Select Print Format to Edit,編集する印刷形式を選択 @@ -1206,10 +1206,10 @@ sites/assets/js/editor.min.js +152,Open Link in a new Window,新しいウィン apps/frappe/frappe/utils/file_manager.py +230,Removed {0},削除済 {0} DocType: Company History,Highlight,ハイライト apps/frappe/frappe/print/doctype/print_format/print_format.py +17,Standard Print Format cannot be updated,標準の印刷フォーマットを更新することはできません -apps/frappe/frappe/core/doctype/doctype/doctype.py +381,"{0}: Create, Submit, Cancel and Amend only valid at level 0",{0}:作成・送信・キャンセル・修正は、レベル0でのみ有効です +apps/frappe/frappe/core/doctype/doctype/doctype.py +381,"{0}: Create, Submit, Cancel and Amend only valid at level 0",{0}:作成・提出・キャンセル・修正は、レベル0でのみ有効です apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +146,Help: Field Properties,ヘルプ:フィールド属性 apps/frappe/frappe/model/document.py +653,Incorrect value in row {0}: {1} must be {2} {3},行 {0} に誤った値:{1} は {2} {3}でなければなりません -apps/frappe/frappe/workflow/doctype/workflow/workflow.py +67,Submitted Document cannot be converted back to draft. Transition row {0},送信されたドキュメントは、ドラフトに変換しなおすことができません。遷移行{0} +apps/frappe/frappe/workflow/doctype/workflow/workflow.py +67,Submitted Document cannot be converted back to draft. Transition row {0},提出されたドキュメントは、ドラフトに変換しなおすことができません。遷移行{0} apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.html +2,Select an existing format to edit or start a new format.,編集または新しいフォーマットを開始する場合、既存のフォーマットを選択してください apps/frappe/frappe/workflow/doctype/workflow/workflow.py +38,Created Custom Field {0} in {1},{1}のカスタムフィールド{0}を作成 apps/frappe/frappe/core/page/user_permissions/user_permissions.js +31,A user can be permitted to multiple records of the same DocType.,ユーザーは同じ文書タイプの複数のレコードへのアクセス許可を得ることができます。 @@ -1222,7 +1222,7 @@ DocType: ToDo,ToDo,やることリスト DocType: DocField,No Copy,コピーがありません DocType: Workflow State,qrcode,QRコード DocType: Web Form,Breadcrumbs,パンくずリスト -apps/frappe/frappe/templates/includes/comments/comments.py +50,{0} by {1},{0}と{1} +apps/frappe/frappe/templates/includes/comments/comments.py +50,{0} by {1},{0} by {1} apps/frappe/frappe/core/doctype/comment/comment.py +39,Cannot add more than 50 comments,50以上のコメントを追加することはできません DocType: Website Settings,Top Bar Items,トップバーアイテム DocType: Print Settings,Print Settings,印刷設定 @@ -1245,15 +1245,15 @@ apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +24 DocType: Print Format,Print Format,印刷書式 apps/frappe/frappe/config/website.py +28,User ID of a blog writer.,ブログライターのユーザーID apps/frappe/frappe/config/setup.py +32,Set Permissions on Document Types and Roles,書類タイプと役割にアクセス許可を設定 -sites/assets/js/desk.min.js +904,New in version {0},バージョン{0}の新 +sites/assets/js/desk.min.js +904,New in version {0},バージョン{0}の変更点 DocType: About Us Settings,"""Company History""",「沿革」 apps/frappe/frappe/permissions.py +226,Permission already set,権限設定済 apps/frappe/frappe/desk/page/activity/activity_row.html +15,Commented on {0}: {1},{0}にコメント:{1} -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +243,These restrictions will apply for Document Types where 'Apply User Permissions' is checked for the permission rule and a field with this value is present.,これらの制限は、許可ルールをチェックし、この値を持つフィールドが存在している「ユーザー権限の適用」のドキュメントタイプに対して適用されます。 +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +243,These restrictions will apply for Document Types where 'Apply User Permissions' is checked for the permission rule and a field with this value is present.,これらの制限は、許可ルールに「ユーザー権限の適用」がチェックされ、この値を持つフィールドが存在している文書タイプに対して、適用されます。 DocType: Email Alert,Send alert if this field's value changes,フィールドの値が変更された場合アラートを送信 apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +102,Select a DocType to make a new format,新しいフォーマットを作るための文書タイプを選択 DocType: Module Def,Module Def,モジュール定義 -sites/assets/js/form.min.js +196,Done,終わりました +sites/assets/js/form.min.js +196,Done,完了 sites/assets/js/form.min.js +286,Reply,返信 DocType: Communication,By,によって DocType: Email Account,SMTP Server,SMTPサーバー @@ -1268,20 +1268,20 @@ apps/frappe/frappe/config/setup.py +142,"Set default format, page size, print st DocType: DocType,Naming,命名 DocType: Event,Every Year,毎年 apps/frappe/frappe/core/doctype/user/user.py +350,Registered but disabled.,登録は完了しましたが有効ではありません。 -sites/assets/js/list.min.js +93,Delete permanently?,恒久的に削除しますか? +sites/assets/js/list.min.js +93,Delete permanently?,完全に削除しますか? sites/assets/js/desk.min.js +827,Search in a document type,文書タイプで検索 apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +201,Allow field to remain editable even after submission,登録後にフィールドを編集可能なままにすることを許可する DocType: DocPerm,Role and Level,役割とレベル apps/frappe/frappe/desk/moduleview.py +31,Custom Reports,カスタム レポート DocType: Website Script,Website Script,ウェブサイトのスクリプト -apps/frappe/frappe/config/setup.py +147,Customized HTML Templates for printing transactions.,印刷トランザクションのカスタマイズされたHTMLテンプレート。 +apps/frappe/frappe/config/setup.py +147,Customized HTML Templates for printing transactions.,取引印刷用のカスタマイズされたHTMLテンプレート apps/frappe/frappe/desk/form/utils.py +103,No further records,これ以上のレコードはありません DocType: DocField,Long Text,長いテキスト apps/frappe/frappe/core/page/data_import_tool/importer.py +35,Please do not change the rows above {0},{0}の上の行を変更しないでください sites/assets/js/desk.min.js +852,(Ctrl + G),(Ctrl + G) sites/assets/js/desk.min.js +808,Sorry! You are not permitted to view this page.,このページを表示する権限がありません。 DocType: Workflow State,bell,鐘 -sites/assets/js/form.min.js +282,Share this document with,この文書を共有します +sites/assets/js/form.min.js +282,Share this document with,この文書を共有 apps/frappe/frappe/desk/page/activity/activity.js +152,Jun,6月 apps/frappe/frappe/utils/nestedset.py +227,{0} {1} cannot be a leaf node as it has children,{0} {1}には子ノードがあるため、リーフノードにすることはできません DocType: Feed,Info,情報 @@ -1293,7 +1293,7 @@ DocType: Role,Role Name,役割名 DocType: Workflow Document State,Workflow Document State,ワークフロー文書のステータス apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +32,"To give acess to a role for only specific records, check the Apply User Permissions. User Permissions are used to limit users with such role to specific records.","ある役割に特定のレコードだけにアクセスさせるには、「ユーザーのアクセス許可を適用」を確認してください。 「ユーザーのアクセス許可」は、特定のレコードへにアクセス可能な役割を持っているユーザーを制限するために使用されます。" -apps/frappe/frappe/workflow/doctype/workflow/workflow.py +70,Cannot cancel before submitting. See Transition {0},送信する前にキャンセルすることはできません。トランジション{0}を参照してください。 +apps/frappe/frappe/workflow/doctype/workflow/workflow.py +70,Cannot cancel before submitting. See Transition {0},提出する前にキャンセルすることはできません。遷移{0}を参照してください。 apps/frappe/frappe/templates/pages/print.py +139,Print Format {0} is disabled,印刷書式{0}は無効になっています DocType: Email Alert,Send days before or after the reference date,前または基準日後の日を送ります DocType: User,Allow user to login only after this hour (0-24),(0-24)以降の時間のみユーザーログインを許可 @@ -1320,7 +1320,7 @@ apps/frappe/frappe/config/setup.py +115,Add / Manage Email Accounts.,メール DocType: Blog Category,Published,公開済 apps/frappe/frappe/templates/emails/auto_reply.html +1,Thank you for your email,メールいただきありがとうございます DocType: DocField,Small Text,小さいテキスト -apps/frappe/frappe/core/doctype/user/user.py +472,Administrator accessed {0} on {1} via IP Address {2}.,管理者がアクセスし、{0} {1}のIPアドレスを介して、{2}。 +apps/frappe/frappe/core/doctype/user/user.py +472,Administrator accessed {0} on {1} via IP Address {2}.,管理者がIPアドレス{2}から{1}の{0}にアクセスしました。 apps/frappe/frappe/core/doctype/doctype/doctype.py +263,Options 'Dynamic Link' type of field must point to another Link Field with options as 'DocType',オプション「ダイナミックリンク」型のフィールドは「DocType」オプションなどの別のリンクフィールドを指している必要があります DocType: About Us Settings,Team Members Heading,チームメンバーの方針 DocType: DocField,Do not allow user to change after set the first time,初回設定以降、ユーザーが変更することはできません @@ -1340,7 +1340,7 @@ DocType: Blog Category,Category Name,カテゴリ名 DocType: Print Settings,PDF Settings,PDF設定 apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +16,Column Name,列名 DocType: Web Form,"In JSON as
    [{""title"":""Jobs"", ""name"":""jobs""}]
    ","JSONの
    のように[{""タイトル"": ""ジョブズ""、 ""名"": ""ジョブが""}] "
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +280,Fieldtype {0} for {1} cannot be indexed,FIELDTYPE {0} {1}は、インデックスを付けることができないために
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +280,Fieldtype {0} for {1} cannot be indexed,{1}のFIELDTYPE {0}にはインデックスを付けることができません
     DocType: Communication,Email Account,メールアカウント
     DocType: Workflow State,Download,ダウンロード
     DocType: Blog Post,Blog Intro,ブログイントロ
    @@ -1348,7 +1348,7 @@ apps/frappe/frappe/core/doctype/report/report.js +37,Enable Report,レポート
     DocType: User,Check / Uncheck roles assigned to the User. Click on the Role to find out what permissions that Role has.,"チェックでユーザーに割り当てられた役割をオン/オフします。
     「役割」をクリックして、どの役割がどの権限を持つかを確認してください。"
     DocType: Web Page,Insert Code,コードを挿入
    -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +548,You can add dynamic properties from the document by using Jinja templating.,あなたは、神社のテンプレートを使用して文書から動的プロパティを追加することができます。
    +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +548,You can add dynamic properties from the document by using Jinja templating.,Jinjaテンプレートを使用して文書から動的プロパティを追加することができます
     sites/assets/js/desk.min.js +825,List a document type,ドキュメントタイプを一覧表示します
     DocType: Event,Ref Type,参照タイプ
     apps/frappe/frappe/core/page/data_import_tool/exporter.py +63,"If you are uploading new records, leave the ""name"" (ID) column blank.",新しいレコードをアップロードする場合、「名前」(ID)欄を空白のままにします
    @@ -1356,18 +1356,18 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +360,
     DocType: Workflow State,Calendar,カレンダー
     apps/frappe/frappe/model/rename_doc.py +95,"Another {0} with name {1} exists, select another name",{1} という名前の別の {0} が存在しますので、別の名前を選択してください
     DocType: DocType,Custom?,カスタム?
    -DocType: Website Settings,Website Theme Image,ウェブサイトのテーマイメージ
    +DocType: Website Settings,Website Theme Image,ウェブサイトのテーマ画像
     DocType: Workflow State,road,道路
     DocType: User,Timezone,時間帯
     sites/assets/js/desk.min.js +538,Unable to load: {0},{0}がロードできません
     DocType: DocField,Read Only,読み取り専用
     DocType: Print Settings,Send Print as PDF,PDFで書類を送信
     DocType: Workflow Transition,Allowed,許可されている
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +287,There can be only one Fold in a form,フォームで唯一のフォールドがある場合もあります
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +287,There can be only one Fold in a form,フォールドはフォーム内に1つしかない場合もあります
     apps/frappe/frappe/website/doctype/website_settings/website_settings.py +23,Invalid Home Page,無効なホームページ
     apps/frappe/frappe/core/doctype/doctype/doctype.py +378,{0}: Permission at level 0 must be set before higher levels are set,{0}:より高いレベルを設定する前に、レベル0の権限を設定しなければなりません
     DocType: Website Settings,Home Page is Products,ホームページは「製品」です
    -apps/frappe/frappe/desk/doctype/todo/todo.py +21,Assignment closed by {0},{0}が割り当てを締め済
    +apps/frappe/frappe/desk/doctype/todo/todo.py +21,Assignment closed by {0},{0}が割当をクローズ済
     sites/assets/js/desk.min.js +831,Calculate,計算
     apps/frappe/frappe/print/doctype/print_format/print_format.js +20,Please select DocType first,文書タイプを選択してください
     DocType: Social Login Keys,GitHub Client ID,GitHubのClient ID 
    @@ -1414,7 +1414,7 @@ DocType: Event,Repeat On,繰り返し
     apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +30,User Permissions,ユーザーのアクセス許可
     apps/frappe/frappe/desk/page/activity/activity.js +153,Oct,10月
     DocType: Workflow State,warning-sign,警告サイン
    -DocType: Website Settings,"Show title in browser window as ""Prefix - title""",などのブラウザウィンドウで表示タイトル「プレフィックス - タイトル "
    +DocType: Website Settings,"Show title in browser window as ""Prefix - title""",「接頭辞 - タイトル」のようにブラウザでタイトルを表示
     DocType: Workflow Document State,Update Value,値更新
     DocType: System Settings,Number Format,数の書式
     DocType: Custom Field,Insert After,後に挿入
    @@ -1457,7 +1457,7 @@ apps/frappe/frappe/core/page/data_import_tool/importer.py +257,Did not find {0}
     apps/frappe/frappe/config/setup.py +39,Set Permissions per User,ユーザーごとに権限を設定
     DocType: Print Format,Edit Format,形式を編集
     apps/frappe/frappe/templates/emails/new_user.html +6,Complete Registration,登録完了
    -apps/frappe/frappe/website/doctype/website_theme/website_theme.py +40,Top Bar Color and Text Color are the same. They should be have good contrast to be readable.,トップバーの色とテキストの色は同じです。彼らは、読み取り可能にする良好なコントラストを持っている必要があります。
    +apps/frappe/frappe/website/doctype/website_theme/website_theme.py +40,Top Bar Color and Text Color are the same. They should be have good contrast to be readable.,トップバーの色とテキストの色が同じです。閲覧に適した色調にしてください
     apps/frappe/frappe/core/page/data_import_tool/exporter.py +67,You can only upload upto 5000 records in one go. (may be less in some cases),1回につき5000件までアップロードすることができます。
     DocType: Print Settings,Print Style,印刷スタイル
     DocType: DocPerm,Import,インポート
    @@ -1467,7 +1467,7 @@ sites/assets/js/desk.min.js +904,updated to {0},{0}に更新
     DocType: Workflow State,chevron-right,山カッコ(右)
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +158,"Change type of field. (Currently, Type change is \
     						allowed among 'Currency and Float')",フィールドの型を変更します。(現在は「通貨および少数」タイプ内の変更が許可されています)
    -DocType: Website Theme,Link to Bootstrap CSS,ブートストラップCSSへのリンク
    +DocType: Website Theme,Link to Bootstrap CSS,Bootstrap CSSへのリンク
     DocType: Workflow State,camera,カメラ
     DocType: Website Settings,Brand HTML,ブランドのHTML
     apps/frappe/frappe/templates/includes/login/login.js +18,Both login and password required,ログインとパスワードの両方が必要
    diff --git a/frappe/translations/pt-BR.csv b/frappe/translations/pt-BR.csv
    index 91c6617248..514b215374 100644
    --- a/frappe/translations/pt-BR.csv
    +++ b/frappe/translations/pt-BR.csv
    @@ -146,7 +146,7 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.ht
     DocType: Website Settings,Add a banner to the site. (small banners are usually good),Adicionar um banner para o site. (Pequenos banners geralmente são melhores)
     DocType: Website Settings,Set Banner from Image,Jogo da bandeira da Imagem
     apps/frappe/frappe/core/doctype/user/user.py +202,User {0} cannot be deleted,O usuário {0} não pode ser excluído
    -sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,"Outra transação está bloqueando este. Por favor, tente novamente em alguns segundos."
    +sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,"Bloqueado por outra transação. Por favor, tente novamente em alguns segundos."
     DocType: Property Setter,Field Name,Nome do Campo
     sites/assets/js/desk.min.js +684,or,ou
     apps/frappe/frappe/templates/generators/web_form.html +265,Continue,Continuar
    @@ -725,7 +725,7 @@ DocType: DocPerm,User Permission DocTypes,Doctypes permissão de usuário
     sites/assets/js/desk.min.js +555,New Name,Novo Nome
     sites/assets/js/form.min.js +196,Insert Above,Inserir Acima
     sites/assets/js/list.min.js +21,Not Saved,Não Salvo
    -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Permitir que o usuário Se
    +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Permitir usuário se
     DocType: Custom Field,Default Value,Valor padrão
     DocType: Workflow Document State,Update Field,Atualizar Campo
     apps/frappe/frappe/email/doctype/email_account/email_account.py +237,Leave this conversation,Deixar essa conversa
    diff --git a/frappe/translations/ro.csv b/frappe/translations/ro.csv
    index 5b015be621..ef64503d5d 100644
    --- a/frappe/translations/ro.csv
    +++ b/frappe/translations/ro.csv
    @@ -1,10 +1,10 @@
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +224,Press Esc to close,Apăsați Esc pentru a închide
    -apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}","O nouă sarcină, {0}, a fost atribuit la tine de {1}. {2}"
    +apps/frappe/frappe/desk/form/assign_to.py +127,"A new task, {0}, has been assigned to you by {1}. {2}","O nouă sarcină, {0}, v-a fost atribuită de catre {1}. {2}"
     apps/frappe/frappe/desk/page/messages/messages_main.html +12,Post,Publică
     apps/frappe/frappe/config/setup.py +98,Rename many items by uploading a .csv file.,Redenumi multe elemente de încărcarea unui fișier csv..
     DocType: Workflow State,pause,pauză
     apps/frappe/frappe/templates/pages/desk.py +19,You are not permitted to access this page.,Nu ti se permite accesul la această pagină.
    -DocType: User,Facebook Username,Facebook Utilizator
    +DocType: User,Facebook Username,Utilizator Facebook
     DocType: Workflow State,eye-open,-ochi deschis
     DocType: Bulk Email,Send After,Trimite După
     apps/frappe/frappe/utils/file_manager.py +28,Please select a file or url,Vă rugăm să selectați un fișier sau URL
    @@ -22,7 +22,7 @@ sites/assets/js/desk.min.js +555,Rename {0},Redenumirea {0}
     DocType: Workflow State,zoom-out,mareste
     apps/frappe/frappe/model/document.py +664,Table {0} cannot be empty,Tabelul {0} nu poate fi gol
     DocType: Social Login Keys,GitHub,GitHub
    -apps/frappe/frappe/model/document.py +638,Beginning with,începând cu
    +apps/frappe/frappe/model/document.py +638,Beginning with,Începând cu
     apps/frappe/frappe/core/page/data_import_tool/exporter.py +51,Data Import Template,Import date Format
     sites/assets/js/desk.min.js +536,Parent,Mamă
     sites/assets/js/desk.min.js +826,"document type..., e.g. customer","tip de document  ... , de exemplu  client "
    @@ -39,7 +39,7 @@ apps/frappe/frappe/model/document.py +655,Incorrect value: {0} must be {1} {2},V
     apps/frappe/frappe/config/setup.py +179,"Change field properties (hide, readonly, permission etc.)","Proprietățile schimbare de câmp (ascunde, readonly, permisiunea etc)"
     DocType: Workflow State,lock,blocare
     apps/frappe/frappe/config/website.py +74,Settings for Contact Us Page.,Setări pentru Contacteaza-ne.
    -apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,Administrator autentificat
    +apps/frappe/frappe/core/doctype/user/user.py +481,Administrator Logged In,Administratorul a fost autentificat
     DocType: Contact Us Settings,"Contact options, like ""Sales Query, Support Query"" etc each on a new line or separated by commas.","Opțiuni de contact, cum ar fi ""Vanzari interogare, interogare Support"", etc fiecare pe o linie nouă sau separate prin virgule."
     sites/assets/js/editor.min.js +155,Insert,Introduceți
     sites/assets/js/desk.min.js +512,Select {0},Selectați {0}
    @@ -67,7 +67,7 @@ DocType: Website Settings,Twitter Share via,Twitter Divide prin
     apps/frappe/frappe/config/website.py +33,Embed image slideshows in website pages.,Slideshow-uri de imagine încorpora în paginile site-ului.
     DocType: Workflow Action,Workflow Action Name,Flux de lucru Acțiune Nume
     apps/frappe/frappe/core/doctype/doctype/doctype.py +131,DocType can not be merged,DocType nu se pot uni
    -DocType: Web Form Field,Fieldtype,FIELDTYPE
    +DocType: Web Form Field,Fieldtype,Tip câmp
     apps/frappe/frappe/desk/form/save.py +44,Did not cancel,Nu a anula
     DocType: Workflow State,plus,plus
     DocType: Scheduler Log,Scheduler Log,Scheduler Conectare
    @@ -81,7 +81,7 @@ apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +61,"Insert After
     DocType: Workflow State,circle-arrow-up,cerc-săgeată-up
     sites/assets/js/desk.min.js +765,Uploading...,Se încarcă ...
     DocType: Workflow State,italic,cursiv
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import without Create,{0}: Nu se poate seta Import fără a crea
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +392,{0}: Cannot set Import without Create,{0}: nu se poate configura importați fără creați
     DocType: Comment,Post Topic,Creaza un subiect
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +2,Widths can be set in px or %.,Lătimea poate fi introdusă în px sau%.
     apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +6,Permissions get applied on Users based on what Roles they are assigned.,Permisiuni se aplică pe Utilizatori bazat pe ceea ce Rolurile sunt atribuite.
    @@ -91,7 +91,7 @@ apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +176,Example,
     DocType: Workflow State,gift,cadou
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +180,Reqd,Reqd
     apps/frappe/frappe/core/doctype/communication/communication.py +119,Unable to find attachment {0},În imposibilitatea de a găsi atașament {0}
    -apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +168,Assign a permission level to the field.,Atribuirea unui nivel de permisiune pentru domeniu.
    +apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +168,Assign a permission level to the field.,Atribuiţi un nivel de permisiune câmpului.
     apps/frappe/frappe/config/setup.py +72,Show / Hide Modules,Arată / Ascunde Module
     apps/frappe/frappe/core/doctype/report/report.js +37,Disable Report,Dezactivați Raport
     DocType: Report,JavaScript Format: frappe.query_reports['REPORTNAME'] = {},JavaScript Format: frappe.query_reports ['REPORTNAME'] = {}
    @@ -109,11 +109,11 @@ sites/assets/js/desk.min.js +373,Show more details,Arată mai multe detalii
     DocType: System Settings,Run scheduled jobs only if checked,Rulați locuri de muncă programate numai dacă verificate
     DocType: Customize Form Field,"Print Width of the field, if the field is a column in a table","Printeaza Lățimea terenului, în cazul în care câmpul este o coloană într-un tabel"
     DocType: Workflow State,headphones,căști
    -DocType: Bulk Email,Bulk Email records.,Înregistrările de e-mail în vrac.
    +DocType: Bulk Email,Bulk Email records.,Înregistrări e-mail în masă.
     apps/frappe/frappe/config/setup.py +217,Send download link of a recent backup to System Managers,Trimite link-ul de download de o copie de rezervă recentă a Managerii de sistem
     DocType: Email Account,e.g. replies@yourcomany.com. All replies will come to this inbox.,"de exemplu, replies@yourcomany.com. Toate răspunsurile vor veni la acest inbox."
    -apps/frappe/frappe/templates/includes/login/login.js +31,Valid email and name required,E-mail validă și numele necesar
    -DocType: DocType,Hide Heading,Ascunde Titlu
    +apps/frappe/frappe/templates/includes/login/login.js +31,Valid email and name required,Este necesar un nume și un email valid
    +DocType: DocType,Hide Heading,Ascunde antet
     DocType: Workflow State,remove-circle,elimina-cerc
     apps/frappe/frappe/config/website.py +54,Javascript to append to the head section of the page.,Javascript pentru a adăuga la secțiunea șef al paginii.
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +53,Reset to defaults,Resetați la valorile implicite
    @@ -123,11 +123,11 @@ DocType: Workflow,Defines workflow states and rules for a document.,Definește s
     DocType: DocType,Show this field as title,Arată acest domeniu ca titlu
     apps/frappe/frappe/model/db_schema.py +417,Fieldname {0} cannot have special characters like {1},"Nume câmp {0} nu poate avea caractere speciale, cum ar fi {1}"
     apps/frappe/frappe/model/document.py +388,Error: Document has been modified after you have opened it,Eroare: Documentul a fost modificat după ce ați deschis
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0}: Nu se poate seta Alocați Trimite dacă nu Submittable
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +413,{0}: Cannot set Assign Submit if not Submittable,{0}: nu se poate configura alocați introducere dacă nu există posibilitate de introducere
     DocType: Social Login Keys,Facebook,Facebook
     apps/frappe/frappe/templates/pages/list.py +59,"Filtered by ""{0}""",Filtrate prin "{0}"
     sites/assets/js/desk.min.js +910,Message from {0},Mesaj de la {0}
    -DocType: Blog Settings,Blog Title,Blog Titlu
    +DocType: Blog Settings,Blog Title,Titlu blog
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +12,Edit to set heading,Editare pentru a stabili poziția
     DocType: About Us Settings,Team Members,Membrii echipei
     sites/assets/js/desk.min.js +467,Please attach a file or set a URL,Vă rugăm să atașați un fișier sau pentru a seta un URL
    @@ -136,17 +136,17 @@ DocType: Workflow State,plus-sign,plus-sign
     sites/assets/js/desk.min.js +830,module name..., nume de modul ... 
     DocType: Event,Public,Public
     apps/frappe/frappe/email/smtp.py +131,Email Account not setup. Please create a new Email Account from Setup > Email > Email Account,Nu cont de email de configurare. Vă rugăm să creați un nou cont de e-mail de la Configurare> E-mail> contului de e-mail
    -DocType: Block Module,Block Module,Bloc Modulul
    +DocType: Block Module,Block Module,Modul de blocare
     apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +3,Export Template,Format Export
     DocType: Block Module,Module,Modul
     DocType: Email Alert,Send Alert On,Trimite Alert On
     DocType: Web Form,Website URL,Website URL
     DocType: Customize Form,"Customize Label, Print Hide, Default etc.","Personaliza Label, Print Hide, Default, etc"
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder_start.html +16,Create a New Format,Creați un nou format
    -DocType: Website Settings,Add a banner to the site. (small banners are usually good),Adauga un banner pe site-ul. (Bannere mici sunt de obicei bune)
    +DocType: Website Settings,Add a banner to the site. (small banners are usually good),Adăugaţi un banner site-ului. (bannerele mici sunt de obicei bune)
     DocType: Website Settings,Set Banner from Image,Setați Banner din imagine
     apps/frappe/frappe/core/doctype/user/user.py +202,User {0} cannot be deleted,Utilizatorul {0} nu poate fi ștearsă
    -sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,O alta tranzactie se blochează asta. Vă rugăm să încercați din nou în câteva secunde.
    +sites/assets/js/desk.min.js +183,Another transaction is blocking this one. Please try again in a few seconds.,O altă tranzactie blochează tranzacţia curentă. Vă rugăm să încercați din nou în câteva secunde.
     DocType: Property Setter,Field Name,Nume câmp
     sites/assets/js/desk.min.js +684,or,sau
     apps/frappe/frappe/templates/generators/web_form.html +265,Continue,Continua
    @@ -174,10 +174,10 @@ apps/frappe/frappe/desk/doctype/event/event.py +64,Upcoming Events for Today,Eve
     DocType: Email Alert Recipient,Email By Document Field,E-mail prin documentul de câmp
     DocType: File Data,File Data,Fișier de date
     apps/frappe/frappe/utils/nestedset.py +210,Merging is only possible between Group-to-Group or Leaf Node-to-Leaf Node,Fuzionarea este posibil numai între Group-la-grup sau Leaf Nod-a-Leaf Node
    -apps/frappe/frappe/utils/file_manager.py +40,Added {0},Adaugata {0}
    +apps/frappe/frappe/utils/file_manager.py +40,Added {0},Adăugat {0}
     DocType: Currency,Fraction Units,Unități de Fractiune
     DocType: Web Page,Parent Web Page,Părinte Web Page
    -apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} trebuie să fie stabilite în primul rând
    +apps/frappe/frappe/model/base_document.py +357,{0} must be set first,{0} trebuie să fie configurat prima dată
     DocType: Workflow State,plane,avion
     apps/frappe/frappe/core/page/data_import_tool/exporter.py +64,"If you are uploading new records, ""Naming Series"" becomes mandatory, if present.","Dacă încărcați noi recorduri, ""Naming Seria"" devine obligatorie, dacă este prezent."
     apps/frappe/frappe/core/doctype/doctype/doctype.py +294,Fold can not be at the end of the form,Fold nu poate fi la sfârșitul formularului
    @@ -185,7 +185,7 @@ apps/frappe/frappe/config/setup.py +14,System and Website Users,De sistem și si
     DocType: Workflow Document State,Doc Status,Doc Starea
     sites/assets/js/desk.min.js +867,"Your download is being built, this may take a few moments...","Descărcarea dvs. este în curs de construit, acest lucru poate dura câteva momente ..."
     sites/assets/js/desk.min.js +828,text in document type,Textul    în   tip de document 
    -DocType: Web Page,Begin this page with a slideshow of images,Începe această pagină cu un slideshow de imagini
    +DocType: Web Page,Begin this page with a slideshow of images,Începeţi această pagină cu un slideshow de imagini
     DocType: Version,Docname,Docname
     apps/frappe/frappe/core/doctype/version/version.js +10,Version restored,Versiune restaurată
     DocType: Event Role,Event Role,Eveniment Rolul
    @@ -198,16 +198,16 @@ apps/frappe/frappe/email/doctype/email_account/email_account.py +231,Re:,Re:
     DocType: Currency,"Sub-currency. For e.g. ""Cent""","Sub-valută. De exemplu ""Cent """
     DocType: Letter Head,Check this to make this the default letter head in all prints,Verifica acest lucru pentru a face acest lucru capul scrisoarea implicit în toate printuri
     DocType: Print Format,Server,Server
    -DocType: DocField,Link,Legarea
    +DocType: DocField,Link,Legătura
     apps/frappe/frappe/utils/file_manager.py +83,No file attached,Nici un fișier atașat
     DocType: Version,Version,Versiune
     DocType: User,Fill Screen,Umple ecranul
     apps/frappe/frappe/core/doctype/role/role.js +9,Edit Permissions,Editare permisiuni
     sites/assets/js/form.min.js +210,Edit via Upload,Edita prin Upload
     DocType: Country,Country Name,Nume Tara
    -DocType: About Us Team Member,About Us Team Member,Membru Echipă Despre noi
    +DocType: About Us Team Member,About Us Team Member,"Membru echipă ""Despre noi"""
     apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +5,"Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions.","Permisiunile sunt setate pe Roluri și Tipuri de documente (numite doctypes) prin stabilirea drepturilor, cum ar citi, scrie, Creare, Ștergere, Trimiteti, Cancel, modifică, Raport, Import, Export, Print, e-mail și a seta permisiuni utilizator."
    -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +19,"Apart from Role based Permission Rules, you can apply User Permissions based on DocTypes.","În afară de rolul pe bază de reguli de permisiune, aveți posibilitatea să aplicați permisiuni utilizator pe baza doctypes."
    +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +19,"Apart from Role based Permission Rules, you can apply User Permissions based on DocTypes.","Exceptând regulile de permisiune bazate pe roluri, aveți posibilitatea să aplicați permisiuni utilizator bazate pe tipuri de documete.."
     apps/frappe/frappe/core/page/user_permissions/user_permissions.js +23,"These permissions will apply for all transactions where the permitted record is linked. For example, if Company C is added to User Permissions of user X, user X will only be able to see transactions that has company C as a linked value.","Aceste permisiuni se vor aplica pentru toate tranzacțiile în care înregistrarea este permis legate. De exemplu, dacă firma C se adaugă la permisiunile utilizatorului de utilizator X, X utilizatorul va putea vedea tranzacții pe care le are firma C ca o valoare legată numai."
     DocType: Property Setter,ID (name) of the entity whose property is to be set,ID-ul (numele) a entității ale cărei proprietate este să fie stabilite
     DocType: Website Settings,Website Theme Image Link,Site-ul Theme Image Link
    @@ -237,15 +237,15 @@ apps/frappe/frappe/email/bulk.py +129,Unsubscribe from this list,Dezabona de la
     apps/frappe/frappe/desk/page/activity/activity.js +153,Sep,Septembrie
     DocType: DocField,Width,Lățime
     DocType: Email Account,Notify if unreplied,Anunta dacă fara raspuns
    -DocType: DocType,Fields,Fields
    +DocType: DocType,Fields,Câmpuri
     apps/frappe/frappe/core/page/data_import_tool/data_import_tool.py +15,Parent Table,Parent Tabel
    -apps/frappe/frappe/website/doctype/website_settings/website_settings.py +38,{0} in row {1} cannot have both URL and child items,{0} în rândul {1} nu poate avea atât de URL și elemente copil
    +apps/frappe/frappe/website/doctype/website_settings/website_settings.py +38,{0} in row {1} cannot have both URL and child items,{0} din rândul {1} nu poate avea atât URL cât și articole copil
     apps/frappe/frappe/utils/nestedset.py +194,Root {0} cannot be deleted,Rădăcină {0} nu poate fi ștearsă
     apps/frappe/frappe/website/doctype/blog_post/blog_post.py +162,No comments yet,Nu există comentarii încă
    -apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +120,Both DocType and Name required,Atât DocType și Nume necesar
    +apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +120,Both DocType and Name required,Atât tipul de document cât  și denumirea sunt necesare
     apps/frappe/frappe/model/document.py +422,Cannot change docstatus from 1 to 0,Nu se poate schimba docstatus 1-0
     DocType: Workflow Transition,Defines actions on states and the next step and allowed roles.,Definește acțiuni de state și pasul următor și roluri permise.
    -apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +11,"As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.","Ca cele mai bune practici, nu atribuie același set de reguli permisiunea de la diferite roluri. În schimb, stabilit roluri multiple către același utilizator."
    +apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +11,"As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.","Ca şi cea mai bună practică, nu atribuiţi același set de reguli de permisiune diferitelor roluri. În schimb, stabiliţi roluri multiple aceluiaşi utilizator."
     DocType: Web Form,Message to be displayed on successful completion,Mesajul va fi afișat pe finalizarea cu succes
     DocType: Website Settings,Footer Items,Subsol Articole
     sites/assets/js/desk.min.js +328,Menu,Meniu
    @@ -254,7 +254,7 @@ apps/frappe/frappe/config/setup.py +19,User Roles,Roluri de utilizator
     DocType: Property Setter,Property Setter overrides a standard DocType or Field property,Proprietatea Setter suprascrie un DocType standard sau proprietate teren
     apps/frappe/frappe/core/doctype/user/user.py +332,Cannot Update: Incorrect / Expired Link.,Nu pot actualiza: incorectă / expirat Link.
     DocType: DocField,Set Only Once,Setat numai o dată
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import as {1} is not importable,{0}: Nu se poate seta de import ca {1} nu este importable
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +419,{0}: Cannot set import as {1} is not importable,{0}: nu se poate configura import ca si {1} daca nu se poate importa
     DocType: Top Bar Item,"target = ""_blank""","target = ""_blank"""
     DocType: Workflow State,hdd,hdd
     apps/frappe/frappe/desk/query_report.py +18,You don't have access to Report: {0},Nu aveți acces la Raport: {0}
    @@ -273,30 +273,30 @@ DocType: File Data,Content Hash,Conținut Hash
     DocType: User,Stores the JSON of last known versions of various installed apps. It is used to show release notes.,Magazine JSON ultimelor versiuni cunoscute ale diferitelor aplicații instalate. Este folosit pentru a arăta notele de lansare.
     DocType: Website Theme,Google Font (Text),Google Font (Text)
     apps/frappe/frappe/core/page/permission_manager/permission_manager.js +316,Did not remove,Nu a elimina
    -DocType: Report,Query,Întrebare
    +DocType: Report,Query,Interogare
     DocType: DocType,Sort Order,Ordine de sortare
    -apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},"""În Vizualizare listă"" nu este permis pentru tipul {0} în rândul {1}"
    +apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +130,'In List View' not allowed for type {0} in row {1},"""În vizualizare listă"" nu este permis pentru tipul {0} în rândul {1}"
     DocType: Custom Field,Select the label after which you want to insert new field.,Selectați eticheta după care doriți să inserați câmpul nou.
     DocType: Website Settings,Tweet will be shared via your user account (if specified),Tweet va fi partajate prin intermediul contului de utilizator (dacă este specificat)
     ,Document Share Report,Document Share Raporteaza
     DocType: User,Last Login,Ultima autentificare
     apps/frappe/frappe/core/doctype/doctype/doctype.py +312,Fieldname is required in row {0},Nume_camp este necesară în rândul {0}
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder_column_selector.html +4,Column,Coloană
    -DocType: Custom Field,Adds a custom field to a DocType,Adaugă un câmp personalizat pentru un DocType
    -sites/assets/js/editor.min.js +103,Bold (Ctrl/Cmd+B),Bold (Ctrl / Cmd + B)
    +DocType: Custom Field,Adds a custom field to a DocType,Adaugă un câmp personalizat unui Tip de document
    +sites/assets/js/editor.min.js +103,Bold (Ctrl/Cmd+B),Îngroşat (Ctrl / Cmd + B)
     apps/frappe/frappe/core/page/user_permissions/user_permissions.js +140,Upload and Sync,Încărcare și sincronizare
     sites/assets/js/form.min.js +274,Shared with {0},În comun cu {0}
     DocType: DocType,Single Types have only one record no tables associated. Values are stored in tabSingles,Tipuri singur avea o singură înregistrare nu tabele asociate. Valorile sunt stocate în tabSingles
    -DocType: Bulk Email,Bulk Email,Bulk Email
    +DocType: Bulk Email,Bulk Email,Email în masă
     DocType: Workflow,Rules defining transition of state in the workflow.,Normele care definesc tranziție de stat în fluxul de lucru.
     DocType: DocField,Index,Index
     sites/assets/js/editor.min.js +107,Number list,Lista Numarul
     apps/frappe/frappe/desk/page/messages/messages_sidebar.html +9,Everyone,Toată lumea
    -DocType: Workflow State,backward,înapoiați
    +DocType: Workflow State,backward,în sens invers
     apps/frappe/frappe/config/setup.py +79,Set numbering series for transactions.,Set serie de numerotare pentru tranzacții.
     DocType: Email Account,POP3 Server,POP3 Server
    -DocType: User,Last IP,Ultima IP
    -apps/frappe/frappe/core/doctype/communication/communication.js +17,Add To,Adaugă La
    +DocType: User,Last IP,Ultima adresă IP
    +apps/frappe/frappe/core/doctype/communication/communication.js +17,Add To,Adăugaţi La
     DocType: DocPerm,Filter records based on User Permissions defined for a user,Filtrarea înregistrărilor pe bază de permisiuni utilizator definite de un utilizator
     sites/assets/js/editor.min.js +111,Insert picture (or just drag & drop),Introduceți imagine (sau pur și simplu drag & drop)
     apps/frappe/frappe/custom/doctype/custom_field/custom_field.py +29,Fieldname not set for Custom Field,Nume câmp nu este setat pentru camp
    @@ -324,10 +324,10 @@ apps/frappe/frappe/website/doctype/web_page/web_page.py +30,Cannot edit template
     apps/frappe/frappe/model/document.py +637,none of,nici unul dintre
     apps/frappe/frappe/core/page/user_permissions/user_permissions.js +127,Upload User Permissions,Încărcați Permisiuni utilizator
     apps/frappe/frappe/core/page/desktop/all_applications_dialog.html +3,Checked items will be shown on desktop,Bifate vor fi afișate pe desktop
    -apps/frappe/frappe/core/doctype/doctype/doctype.py +409,{0} cannot be set for Single types,{0} nu poate fi setat pentru tipuri de single
    +apps/frappe/frappe/core/doctype/doctype/doctype.py +409,{0} cannot be set for Single types,{0} nu poate fi setat pentru tipuri singulare
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.py +97,{0} updated,{0} actualizat
     apps/frappe/frappe/core/doctype/doctype/doctype.py +399,Report cannot be set for Single types,Raportul nu poate fi setat pentru tipuri de single
    -apps/frappe/frappe/desk/page/activity/activity.js +152,Feb,Februarie
    +apps/frappe/frappe/desk/page/activity/activity.js +152,Feb,Feb
     DocType: DocPerm,Role,Rol
     apps/frappe/frappe/utils/data.py +380,Cent,Cent
     apps/frappe/frappe/config/setup.py +104,Manage uploaded files.,Gestiona fișierele încărcate.
    @@ -345,7 +345,7 @@ DocType: About Us Settings,Company Introduction,Compania Introducere
     DocType: DocPerm,Apply User Permissions,Aplicați permisiuni utilizator
     DocType: User,Modules HTML,Module HTML
     sites/assets/js/desk.min.js +403,Missing Values Required,Valorile lipsă necesare
    -sites/assets/js/list.min.js +105,{0} is not set,{0} nu este setat
    +sites/assets/js/list.min.js +105,{0} is not set,{0} nu este configurat
     apps/frappe/frappe/permissions.py +168,Not allowed to access {0} with {1} = {2},Nu este permis accesul la {0} cu {1} = {2}
     apps/frappe/frappe/templates/emails/print_link.html +2,View this in your browser,Vezi acest din browser-ul dvs.
     DocType: DocType,Search Fields,Căutare Fields
    @@ -369,15 +369,15 @@ apps/frappe/frappe/desk/page/applications/applications.js +24,No Apps Installed,
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +181,Mark the field as Mandatory,Marcați câmpul ca Obligatoriu
     DocType: User,Google User ID,Google ID utilizator
     apps/frappe/frappe/desk/form/utils.py +66,This method can only be used to create a Comment,Această metodă poate fi utilizată numai pentru a crea un comentariu
    -apps/frappe/frappe/config/setup.py +195,Add custom forms.,Adauga forme personalizate.
    +apps/frappe/frappe/config/setup.py +195,Add custom forms.,Adăugaţi forme personalizate.
     apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +9,The system provides many pre-defined roles. You can add new roles to set finer permissions.,Sistemul oferă multe roluri predefinite. Puteți adăuga noi roluri pentru a seta permisiuni fine.
     DocType: Country,Geo,Geo
    -DocType: Blog Category,Blog Category,Blog Categorie
    +DocType: Blog Category,Blog Category,Categorie Blog
     DocType: User,Roles HTML,Roluri HTML
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +109,All customizations will be removed. Please confirm.,Toate personalizările vor fi eliminate. Vă rugăm să confirmați.
     DocType: Page,Page HTML,Pagina HTML
     DocType: Web Page,Header,Antet
    -sites/assets/js/desk.min.js +536,Unknown Column: {0},Coloana necunoscut: {0}
    +sites/assets/js/desk.min.js +536,Unknown Column: {0},Coloana necunoscută: {0}
     DocType: Email Alert Recipient,Optional: Always send to these ids. Each email id on a new row,Optional: trimite întotdeauna la aceste id-uri. Fiecare id-ul de e-mail pe un rând nou
     apps/frappe/frappe/core/page/permission_manager/permission_manager.js +292,Users with role {0}:,Utilizatorii cu rol de {0}:
     DocType: Print Format,Custom Format,Format personalizat
    @@ -392,21 +392,21 @@ apps/frappe/frappe/desk/form/assign_to.py +114,"The task {0}, that you assigned
     DocType: User,Modules Access,Module de acces
     DocType: Print Format,Print Format Type,Print Format Tip
     sites/assets/js/desk.min.js +841,Open Source Applications for the Web,Open Source Cererile pentru Web
    -DocType: DocType,Hide Toolbar,Ascunde Toolbar
    +DocType: DocType,Hide Toolbar,Ascunde toolbar
     DocType: Email Account,SMTP Settings for outgoing emails,Setări SMTP pentru e-mailurile trimise
     apps/frappe/frappe/core/page/data_import_tool/data_import_tool.js +116,Import Failed,Import eșuat
     apps/frappe/frappe/templates/emails/password_update.html +3,Your password has been updated. Here is your new password,Parola dvs. a fost actualizată. Iată noua parolă
     DocType: Email Account,Auto Reply Message,Auto Raspunde Mesaj
     DocType: Email Alert,Condition,Condiție
     sites/assets/js/desk.min.js +829,Open a module or tool,Deschideți un modul sau instrument
    -DocType: Module Def,App Name,Numele App
    +DocType: Module Def,App Name,Denumirea aplicaţiei
     DocType: Workflow,"Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)","Câmp care reprezintă statul Workflow a tranzacției (în cazul în care câmpul nu este prezent, un nou ascuns camp va fi creat)"
     apps/frappe/frappe/templates/pages/login.py +162,Email not verified with {1},E-mail nu a verificat cu {1}
     DocType: Email Account,e.g. pop.gmail.com,"de exemplu, pop.gmail.com"
     apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +526,Edit to add content,Editați să adaugati continut
     DocType: Web Form,Advanced,Avansat
     DocType: User,"User Type ""System User"" can access Desktop. ""Website User"" can only be logged into the website and portal pages.","Tip utilizator ""Sistem de Utilizator"" poate accesa Desktop. ""Site-ul de utilizator"" poate fi conectat la site-ul și paginile de portal numai."
    -DocType: File Data,Attached To Name,Atașat La Nume
    +DocType: File Data,Attached To Name,Atașat denumirii
     apps/frappe/frappe/email/receive.py +53,Invalid User Name or Support Password. Please rectify and try again.,Nume utilizator invalid sau suport Parola. Vă rugăm să rectifice și să încercați din nou.
     DocType: Email Account,Yahoo Mail,Yahoo Mail
     apps/frappe/frappe/core/page/permission_manager/permission_manager.js +469,Saved!,Salvat!
    @@ -425,11 +425,11 @@ DocType: Workflow State,retweet,retweet
     apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +40,Update the template and save in CSV (Comma Separate Values) format before attaching.,Actualizati-șablon și salva în CSV (Comma Valori separate) format înainte de a atașa.
     apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +163,Specify the value of the field,Precizați valoarea câmpului
     apps/frappe/frappe/desk/page/activity/activity.js +152,May,Mai
    -apps/frappe/frappe/desk/page/activity/activity.js +152,Jan,Jan
    +apps/frappe/frappe/desk/page/activity/activity.js +152,Jan,Ian
     DocType: Workflow State,eye-close,ochi-close
    -,Applications,Aplicatii
    +,Applications,Cereri
     sites/assets/js/desk.min.js +211,Report this issue,Raporta această problemă
    -DocType: Custom Script,Adds a custom script (client or server) to a DocType,Adaugă un script personalizat (client sau server) pentru un DocType
    +DocType: Custom Script,Adds a custom script (client or server) to a DocType,Adaugă un script personalizat (client sau server) unui Tip de document
     DocType: Customize Form Field,"This field will appear only if the fieldname defined here has value OR the rules are true (examples): 
    myfield eval:doc.myfield=='My Value'
    @@ -455,8 +455,8 @@ sites/assets/js/desk.min.js +125,Confirm,Confirma DocType: System Settings,yyyy-mm-dd,aaaa-ll-zz DocType: Website Slideshow,Website Slideshow,Site-ul Slideshow DocType: Website Settings,"Link that is the website home page. Standard Links (index, login, products, blog, about, contact)","Link, care este pagina de start site-ul web. Link-uri standard (index, autentificare, produse, blog, despre, contact)" -sites/assets/js/editor.min.js +105,Bullet list,Lista Bullet -DocType: Website Settings,Banner Image,Banner Image +sites/assets/js/editor.min.js +105,Bullet list,Listă cartuş +DocType: Website Settings,Banner Image,Imagine banner DocType: Custom Field,Custom Field,Câmp personalizat apps/frappe/frappe/email/doctype/email_alert/email_alert.py +13,Please specify which date field must be checked,Vă rugăm să specificați care data domeniu trebuie să fie verificate DocType: DocPerm,Set User Permissions,Setarea permisiunilor de utilizator @@ -472,12 +472,12 @@ DocType: Workflow State,move,Mutare DocType: System Settings,Date and Number Format,Data și numărul Format DocType: Website Theme,"Add the name of a Google Web Font e.g. ""Open Sans""","Adauga numele unei Google Web fonturi de exemplu "Sans deschise"" DocType: Web Form,Actions,Acțiuni -DocType: Workflow State,align-justify,alinia-justifica +DocType: Workflow State,align-justify,aliniați-justify DocType: User,Middle Name (Optional),Numele de mijloc (Optional) sites/assets/js/desk.min.js +519,No Results,Nici un rezultat DocType: System Settings,Security,Securitate -DocType: Currency,**Currency** Master,** ** Moneda Facultate -DocType: Website Settings,Address and other legal information you may want to put in the footer.,Adresă și alte informații juridice poate doriți să pună în subsol. +DocType: Currency,**Currency** Master,Master **Monedă** +DocType: Website Settings,Address and other legal information you may want to put in the footer.,Adresă și alte informații juridice pe care aţi dori să le poziţionaţi în nota de subsol. sites/assets/js/list.min.js +102,Starred By Me,A jucat By Me apps/frappe/frappe/core/page/permission_manager/permission_manager.js +48,Select Document Type,Selectare tip document apps/frappe/frappe/utils/nestedset.py +201,Cannot delete {0} as it has child nodes,"Nu se poate șterge {0}, deoarece are noduri copil" @@ -486,14 +486,14 @@ apps/frappe/frappe/desk/doctype/event/event.py +24,Every day events should finis DocType: Communication,User Tags,Tag-uri de utilizator DocType: Workflow State,download-alt,descarcati-alt DocType: Web Page,Main Section,Secțiunea principală -apps/frappe/frappe/core/doctype/doctype/doctype.py +226,{0} not allowed in fieldname {1},{0} nu este permis în fieldname {1} +apps/frappe/frappe/core/doctype/doctype/doctype.py +226,{0} not allowed in fieldname {1},{0} nu este permis în denumirea câmpului {1} DocType: Page,Icon,icoană DocType: Web Page,Content in markdown format that appears on the main side of your page,Conținut în format reduceri din care apare în partea principală a paginii dvs. DocType: System Settings,dd/mm/yyyy,zz / ll / aaaa DocType: Website Settings,"An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [favicon-generator.org]","Un fișier cu extensia ico icon.. Ar trebui să fie de 16 x 16 px. Generată cu ajutorul unui generator de favicon. [ favicon-generator.org ]" -DocType: Blog Settings,Blog Settings,Setări Blog +DocType: Blog Settings,Blog Settings,Setări blog apps/frappe/frappe/templates/emails/new_user.html +8,You can also copy-paste this link in your browser,"De asemenea, puteți să copiați-paste această legătură în browser-ul dvs." -DocType: Workflow State,bullhorn,portavocea +DocType: Workflow State,bullhorn,portavoce DocType: Social Login Keys,Facebook Client Secret,Facebook Client Secret DocType: Website Settings,Copyright,Copyright DocType: Social Login Keys,Google Client Secret,Google Client Secret @@ -504,7 +504,7 @@ apps/frappe/frappe/core/doctype/doctype/doctype.py +235,Field {0} of type {1} ca apps/frappe/frappe/core/page/permission_manager/permission_manager.js +414,If {0} is permitted,Dacă {0} este permisă ,Activity,Activitate DocType: Note,"Help: To link to another record in the system, use ""#Form/Note/[Note Name]"" as the Link URL. (don't use ""http://"")","Ajutor: Pentru a va relationa la o altă înregistrare în sistem, utilizați ""#Formular / Nota / [Denumire Nota]"" ca URL de legatura. (Nu folositi ""http://"")" -apps/frappe/frappe/config/setup.py +185,Add fields to forms.,Adăugați câmpuri la formulare. +apps/frappe/frappe/config/setup.py +185,Add fields to forms.,Adăugați câmpuri formelor. apps/frappe/frappe/templates/pages/me.py +14,You need to be logged in to access this page.,Aveți nevoie pentru a fi conectat pentru a accesa această pagină. DocType: Workflow State,leaf,frunze apps/frappe/frappe/config/desktop.py +60,Installer,Installer @@ -542,17 +542,17 @@ apps/frappe/frappe/templates/includes/login/login.js +119,Invalid Login,Invalid DocType: Communication,Phone No.,Telefon No. DocType: Workflow State,fire,foc DocType: Workflow State,picture,poză -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +301,Add A New Restriction,Adaugă o nouă restricție +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +301,Add A New Restriction,Adăugaţi o nouă restricție DocType: Workflow Transition,Next State,State următor sites/assets/js/editor.min.js +119,Align Left (Ctrl/Cmd+L),Aliniați stânga (Ctrl / Cmd + L) -DocType: User,Block Modules,Bloc Module +DocType: User,Block Modules,Module de blocare DocType: Web Page,Custom CSS,CSS personalizat -sites/assets/js/form.min.js +285,Add a comment,Adaugă un comentariu +sites/assets/js/form.min.js +285,Add a comment,Adăugaţi un comentariu apps/frappe/frappe/config/setup.py +229,Log of error on automated events (scheduler).,Log de eroare cu privire la evenimentele automate (scheduler). apps/frappe/frappe/utils/csvutils.py +74,Not a valid Comma Separated Value (CSV File),Nu este un valabil valoare separate prin virgulă (CSV File) DocType: Email Account,Default Incoming,Implicit intrare DocType: Workflow State,repeat,repeta -DocType: Website Settings,Banner,Steag +DocType: Website Settings,Banner,Banner sites/assets/js/desk.min.js +822,Help on Search,Ajutor pe Cautare DocType: User,Uncheck modules to hide from user's desktop,Module Debifați pentru a ascunde de pe desktop utilizatorului DocType: DocType,Hide Copy,Ascunde Copy @@ -573,10 +573,10 @@ sites/assets/js/desk.min.js +521,Make a new,Face un nou DocType: Print Settings,PDF Page Size,PDF Page Size sites/assets/js/desk.min.js +852,About,Despre apps/frappe/frappe/core/page/data_import_tool/exporter.py +66,"For updating, you can update only selective columns.","Pentru actualizarea, puteți actualiza coloane numai selective." -sites/assets/js/desk.min.js +870,Attach Document Print,Atașați Document Print +sites/assets/js/desk.min.js +870,Attach Document Print,Atașați document imprimat DocType: Social Login Keys,Google Client ID,Google Client ID -apps/frappe/frappe/core/doctype/user/user.py +63,Adding System Manager to this User as there must be atleast one System Manager,Adăugarea System Manager pentru acest utilizator ca trebuie să existe cel puțin un System Manager -apps/frappe/frappe/desk/doctype/todo/todo.py +17,Assigned to {0},Alocate pentru {0} +apps/frappe/frappe/core/doctype/user/user.py +63,Adding System Manager to this User as there must be atleast one System Manager,Adăugarea managerului de sistem acestui utilizator pentru că trebuie să existe cel puțin un manager de sistem +apps/frappe/frappe/desk/doctype/todo/todo.py +17,Assigned to {0},Atribuit pentru {0} DocType: Workflow State,list-alt,Lista-alt apps/frappe/frappe/templates/pages/update-password.html +69,Password Updated,Parola Actualizat apps/frappe/frappe/core/page/modules_setup/modules_setup.js +18,"Select modules to be shown (based on permission). If hidden, they will be hidden for all users.","Selectați module să fie afișate (bazat pe permisiune). Dacă ascunse, acestea vor fi ascunse pentru toți utilizatorii." @@ -589,7 +589,7 @@ DocType: User,Set New Password,Set New Password DocType: User,Github User ID,Github ID utilizator DocType: Communication,Chat,Chat apps/frappe/frappe/core/doctype/doctype/doctype.py +231,Fieldname {0} appears multiple times in rows {1},Nume câmp {0} apare de mai multe ori în rânduri {1} -DocType: Workflow State,arrow-down,săgeată-jos +DocType: Workflow State,arrow-down,săgeată-în jos sites/assets/js/desk.min.js +779,Collapse,Restrange apps/frappe/frappe/model/delete_doc.py +131,User not allowed to delete {0}: {1},Utilizatorul nu este permis pentru a șterge {0}: {1} DocType: Website Settings,Linked In Share,Linked In Ponderea @@ -599,7 +599,7 @@ sites/assets/js/desk.min.js +463,Please save the document before uploading.,Vă apps/frappe/frappe/core/doctype/doctype/doctype.py +292,Fold must come before a Section Break,Fold trebuie să vină în fața unei secțiuni Break apps/frappe/frappe/core/doctype/user/user.py +374,Not allowed to reset the password of {0},Nu este permis pentru a reseta parola de {0} DocType: Workflow State,hand-down,mână-jos -apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0}: Nu se poate seta anula fără Trimite +apps/frappe/frappe/core/doctype/doctype/doctype.py +385,{0}: Cannot set Cancel without Submit,{0}: nu se poate configura anulați fără introduceți DocType: Website Theme,Theme,Temă DocType: DocType,Is Submittable,Este Submittable apps/frappe/frappe/custom/doctype/property_setter/property_setter.js +7,Value for a check field can be either 0 or 1,Valoarea pentru un câmp de verificare poate fi 0 sau 1 @@ -608,10 +608,10 @@ apps/frappe/frappe/core/page/data_import_tool/exporter.py +217,Column Labels:,Et apps/frappe/frappe/model/naming.py +62,Naming Series mandatory,Naming Series obligatorie DocType: Social Login Keys,Facebook Client ID,Facebook Client ID DocType: Workflow State,Inbox,Inbox -DocType: Workflow State,Tag,Tag +DocType: Workflow State,Tag,Etichetă DocType: Custom Script,Script,Scenariu sites/assets/js/desk.min.js +852,My Settings,Setările mele -DocType: Website Theme,Text Color,Text Color +DocType: Website Theme,Text Color,Culoare text apps/frappe/frappe/website/doctype/web_form/web_form.py +53,Invalid Request,Cerere nevalid sites/assets/js/desk.min.js +366,This form does not have any input,Acest formular nu are nici o intrare apps/frappe/frappe/core/doctype/system_settings/system_settings.py +17,Session Expiry must be in format {0},Sesiune de expirare trebuie să fie în format {0} @@ -625,12 +625,12 @@ DocType: Website Settings,Disable Signup,Dezactivați Inregistreaza-te apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +7,Roles can be set for users from their User page.,Rolurile pot fi setate pentru utilizatorii de la pagina lor de utilizare. apps/frappe/frappe/website/doctype/web_page/web_page.py +158,Website Search,Site-ul de căutare DocType: DocField,Mandatory,Obligatoriu -apps/frappe/frappe/core/doctype/doctype/doctype.py +356,{0}: No basic permissions set,{0}: Nu set de permisiuni de bază +apps/frappe/frappe/core/doctype/doctype/doctype.py +356,{0}: No basic permissions set,{0}: Nici o permisiune de bază nu a fost configurată apps/frappe/frappe/utils/backups.py +140,Download link for your backup will be emailed on the following email address: {0},Descarcă link-ul pentru backup-ul va fi trimis pe adresa de e-mail: {0} apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +14,"Meaning of Submit, Cancel, Amend","Înțeles Trimiteti, anula, modifică" apps/frappe/frappe/desk/doctype/todo/todo_list.js +7,To Do,Pentru a face sites/assets/js/editor.min.js +94,Paragraph,Paragraf -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +133,Any existing permission will be deleted / overwritten.,Orice permisiune existente vor fi șterse / suprascris. +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +133,Any existing permission will be deleted / overwritten.,Orice permisiune existentă va fi ștearsă / suprascrisă. DocType: DocField,Percent,La sută DocType: Workflow State,book,carte DocType: Website Settings,Landing Page,Landing Page @@ -641,7 +641,7 @@ DocType: Email Alert,Send alert if date matches this field's value,Trimite alert DocType: Workflow,Transitions,Tranziții DocType: User,Login After,Autentifică-te După DocType: Workflow State,thumbs-up,thumbs-up -sites/assets/js/desk.min.js +870,Add Reply,Raspunde +sites/assets/js/desk.min.js +870,Add Reply,Adăugaţi răspuns DocType: DocPerm,DocPerm,DocPerm apps/frappe/frappe/core/doctype/doctype/doctype.py +273,Precision should be between 1 and 6,Precizie trebuie să fie între 1 și 6 DocType: About Us Team Member,Image Link,Imagine Link @@ -652,28 +652,28 @@ DocType: Workflow State,text-height,text-înălțime DocType: Workflow State,map-marker,Harta marker apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +39,Submit an Issue,Prezenta eroare DocType: Event,Repeat this Event,Repetați acest eveniment -DocType: DocPerm,Amend,Îndreptarea +DocType: DocPerm,Amend,Modificaţi apps/frappe/frappe/templates/includes/login/login.js +43,Valid Login id required.,Valabil Intra id este necesar. -apps/frappe/frappe/desk/doctype/todo/todo.js +30,Re-open,Re-deschis -apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0}-ne împărtășit acest document cu {1} +apps/frappe/frappe/desk/doctype/todo/todo.js +30,Re-open,Re-deschide +apps/frappe/frappe/core/doctype/docshare/docshare.py +44,{0} un-shared this document with {1},{0} a departajat acest document cu {1} apps/frappe/frappe/templates/emails/auto_reply.html +4,This is an automatically generated reply,Acesta este un răspuns generat automat apps/frappe/frappe/model/document.py +376,Record does not exist,Înregistrare nu există apps/frappe/frappe/templates/pages/404.html +4,Page missing or moved,Page lipsă sau deplasate -sites/assets/js/desk.min.js +479,Open Link,Deschideți linkul +sites/assets/js/desk.min.js +479,Open Link,Deschide link-ul apps/frappe/frappe/desk/form/load.py +42,Did not load,Nu a încărcat apps/frappe/frappe/desk/query_report.py +79,Query must be a SELECT,Interogare trebuie să fie un SELECT DocType: Website Settings,Facebook Share,Facebook Opțiunea apps/frappe/frappe/utils/file_manager.py +181,File size exceeded the maximum allowed size of {0} MB,Dimensiunea fișierului a depășit mărimea maximă permisă de {0} MB apps/frappe/frappe/core/doctype/doctype/doctype.py +344,Enter at least one permission row,Introduceți cel puțin un rând permisiune sites/assets/js/desk.min.js +536,Created On,Creat pe -DocType: Workflow State,align-center,alinia-centru +DocType: Workflow State,align-center,aliniați-centru sites/assets/js/form.min.js +282,Can Write,Poate scrie apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +16,"Certain documents, like an Invoice, should not be changed once final. The final state for such documents is called Submitted. You can restrict which roles can Submit.","Anumite documente, cum ar fi o factură, nu ar trebui să fie schimbat o dată finală. Starea finală pentru astfel de documente este numit Trimis. Puteți restricționa roluri care pot depune." DocType: Communication,Sender,Expeditor DocType: Web Page,Description for search engine optimization.,Descriere pentru optimizarea motorului de căutare. apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +21,Download Blank Template,Descarcă Format Blank DocType: DocField,In Filter,În Filter -DocType: Website Theme,Footer Color,Subsol Color +DocType: Website Theme,Footer Color,Culoare subsol DocType: Web Page,"Page to show on the website ",Pagina pentru a afișa pe site-ul apps/frappe/frappe/core/page/user_permissions/user_permissions.py +58,Cannot remove permission for DocType: {0} and Name: {1},Nu se poate elimina permisiunea de DocType: {0} și Nume: {1} @@ -684,23 +684,22 @@ DocType: Print Settings,Letter,Scrisoare apps/frappe/frappe/core/page/permission_manager/permission_manager.js +95,Reset Permissions for {0}?,Reset Permisiunile pentru {0}? apps/frappe/frappe/permissions.py +222,{0} {1} not found,{0} {1} nu a fost găsit apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +214,Show a description below the field,Afiseaza o descriere de mai jos domeniul -DocType: Workflow State,align-left,alinia stânga- +DocType: Workflow State,align-left,aliniați-stânga DocType: User,Defaults,Implicite sites/assets/js/desk.min.js +555,Merge with existing,Merge cu existente -DocType: User,Birth Date,Data nașterii +DocType: User,Birth Date,Dată naștere DocType: Workflow State,fast-backward,rapid-înapoi DocType: DocShare,DocShare,DocShare -DocType: Report,Add Total Row,Adauga totală Row +DocType: Report,Add Total Row,Adăugaţi rândul total apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +19,For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment.,"De exemplu, dacă anulați și modifice INV004 va deveni un nou document de INV004-1. Acest lucru vă ajută să urmăriți de fiecare amendament." -DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - Proiect; 1 - Trimis; 2 - Anulat +DocType: Workflow Document State,0 - Draft; 1 - Submitted; 2 - Cancelled,0 - Schiță; 1 - Trimis; 2 - Anulat apps/frappe/frappe/core/page/modules_setup/modules_setup.js +5,Show or Hide Modules,Afișarea sau ascunderea Module -DocType: File Data,Attached To DocType,Atașat la DocType +DocType: File Data,Attached To DocType,Atașat tipuli de document apps/frappe/frappe/desk/page/activity/activity.js +153,Aug,August DocType: DocField,Int,Int DocType: Currency,"1 Currency = [?] Fraction -For e.g. 1 USD = 100 Cent","1 valutar = [?] Fracțiunea -, de exemplu 1 USD = 100 Cent" -apps/frappe/frappe/core/page/permission_manager/permission_manager.js +363,Add New Permission Rule,Adauga pe Regulă nouă Permisiunea +For e.g. 1 USD = 100 Cent","1 monedă = [?] Fracțiunea pentru, de exemplu 1 USD = 100 Cenți" +apps/frappe/frappe/core/page/permission_manager/permission_manager.js +363,Add New Permission Rule,Adaugaţi regulă de permisiune nouă sites/assets/js/desk.min.js +512,You can use wildcard %,Puteți utiliza wildcard% apps/frappe/frappe/desk/page/activity/activity.js +152,Mar,Strica sites/assets/js/desk.min.js +768,"Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed","Doar extensiile de imagine (.gif, .jpg, .jpeg, .tiff, .png, SVG) permise" @@ -718,19 +717,19 @@ DocType: DocPerm,Write,Scrie apps/frappe/frappe/core/doctype/report/report.py +29,Only Administrator allowed to create Query / Script Reports,Numai Administrator permis de a crea Cautare / Script Rapoarte sites/assets/js/form.min.js +180,Updating,Actualizarea sites/assets/js/desk.min.js +870,Select Attachments,Selectați atașate -sites/assets/js/form.min.js +283,Attach File,Ataseaza Fisier +sites/assets/js/form.min.js +283,Attach File,Ataşaţi fişier apps/frappe/frappe/templates/emails/new_user.html +3,A new account has been created for you,Un cont nou a fost creat pentru tine apps/frappe/frappe/templates/emails/password_update.html +1,Password Update Notification,Parola actualizare Notificare DocType: DocPerm,User Permission DocTypes,Doctypes permisiunea utilizatorului sites/assets/js/desk.min.js +555,New Name,Nume nou sites/assets/js/form.min.js +196,Insert Above,Inserare Deasupra sites/assets/js/list.min.js +21,Not Saved,Nu salvate -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Permiteți utilizatorului Dacă +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Allow User If,Permiteți utilizator dacă DocType: Custom Field,Default Value,Valoare implicită DocType: Workflow Document State,Update Field,Actualizare câmp apps/frappe/frappe/email/doctype/email_account/email_account.py +237,Leave this conversation,Lasă această conversație apps/frappe/frappe/model/base_document.py +353,Options not set for link field {0},Opțiuni nu este setat pentru câmp legătură {0} -DocType: Workflow State,asterisk,asterisc +DocType: Workflow State,asterisk,Asterisc apps/frappe/frappe/core/page/data_import_tool/exporter.py +61,Please do not change the template headings.,Vă rugăm să nu modificați rubricile șablon. DocType: Workflow State,shopping-cart,cosul DocType: Social Login Keys,Google,Google @@ -752,7 +751,7 @@ apps/frappe/frappe/core/doctype/user/user.py +80,New password emailed,Noua parol apps/frappe/frappe/auth.py +198,Login not allowed at this time,Autentificare nu este permis în acest moment DocType: DocType,Permissions Settings,Permisiuni Setări sites/assets/js/desk.min.js +836,{0} List,{0} Lista -apps/frappe/frappe/desk/form/assign_to.py +39,Already in user's To Do list,Deja în utilizatorului de a face lista +apps/frappe/frappe/desk/form/assign_to.py +39,Already in user's To Do list,Există deja lista de sarcini a utilizatorului DocType: Email Account,Enable Outgoing,Activați ieșire DocType: DocField,Text,Text apps/frappe/frappe/config/setup.py +125,Standard replies to common queries.,Standard răspunde la întrebări comune. @@ -769,12 +768,12 @@ DocType: Workflow,Workflow,Flux de lucru DocType: Workflow State,Upload,încărcați DocType: System Settings,Date Format,Format Dată apps/frappe/frappe/website/doctype/blog_post/blog_post_list.js +7,Not Published,Nu Publicat -apps/frappe/frappe/config/setup.py +168,"Actions for workflow (e.g. Approve, Cancel).","Acțiuni pentru fluxul de lucru (de exemplu, Aprobare, Anulare)." +apps/frappe/frappe/config/setup.py +168,"Actions for workflow (e.g. Approve, Cancel).","Acțiuni pentru flux de lucru (de exemplu, aprobaţi, anulaţi)." DocType: Workflow State,flag,Semnalizare DocType: Web Page,Text Align,Alinierea textului DocType: Contact Us Settings,Forward To Email Address,Mai departe la adresa de email apps/frappe/frappe/core/doctype/doctype/doctype.py +79,Title field must be a valid fieldname,Câmp titlu trebuie să fie un fieldname valid -DocType: Communication,Archived,Arhiva +DocType: Communication,Archived,Arhivat DocType: System Settings,Session Expiry in Hours e.g. 06:00,Sesiunea de expirare în Ore de exemplu 06:00 apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +35,"Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).","După ce ați stabilit acest lucru, utilizatorii vor fi doar documente de acces capabile (ex. Blog post), în cazul în care există link-ul (de exemplu, Blogger)." apps/frappe/frappe/utils/csvutils.py +33,Unable to open attached file. Please try again.,În imposibilitatea de a deschide fișierul atașat. Încercaţi din nou. @@ -784,10 +783,10 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +181, DocType: Comment,Comment Docname,Comment Docname apps/frappe/frappe/core/page/permission_manager/permission_manager.js +54,Select Role,Selectați Rolul apps/frappe/frappe/model/delete_doc.py +200,Deleted,Șters -DocType: Workflow State,adjust,ajusta +DocType: Workflow State,adjust,Ajustaţi DocType: Website Settings,Disable Customer Signup link in Login page,Dezactiva client link Inregistrare in Intrare pagină -apps/frappe/frappe/core/report/todo/todo.py +21,Assigned To/Owner,Atribuite / Proprietar -DocType: Workflow State,arrow-left,stânga-săgeată +apps/frappe/frappe/core/report/todo/todo.py +21,Assigned To/Owner,Atribuit pentru/Proprietar +DocType: Workflow State,arrow-left,săgeată-în stânga apps/frappe/frappe/desk/page/applications/application_row.html +5,Installed,Instalat DocType: Workflow State,fullscreen,fullscreen DocType: Event,Ref Name,Numele Ref @@ -815,8 +814,9 @@ sites/assets/js/desk.min.js +163,Enter Value,Introduceți valoarea DocType: Workflow State,tint,tentă DocType: Workflow State,Style,Stil apps/frappe/frappe/website/doctype/blog_post/blog_post.py +166,{0} comments,{0} comentarii -DocType: Customize Form Field,Label and Type,Etichetă și de tip +DocType: Customize Form Field,Label and Type,Etichetă și tip DocType: Workflow State,forward,înainte +sites/assets/js/form.min.js +270,{0} edited this {1},{0} a editat acest {1} DocType: Web Page,Custom Javascript,Personalizat Javascript DocType: DocPerm,Submit,Trimite DocType: Website Settings,Sub-domain provided by erpnext.com,Sub-domeniu furnizate de erpnext.com @@ -831,8 +831,8 @@ DocType: Event,Participants,Participanţii DocType: Bulk Email,Reference DocName,Referință DocName DocType: Web Form,Success Message,Succes Mesaj DocType: DocType,User Cannot Search,Utilizatorul nu poate căuta -apps/frappe/frappe/desk/page/activity/activity.js +47,Build Report,Intocmeste Raport -apps/frappe/frappe/model/rename_doc.py +92,"{0} {1} does not exist, select a new target to merge","{0} {1} nu există, selectați un nou obiectiv de a fuziona" +apps/frappe/frappe/desk/page/activity/activity.js +47,Build Report,Întocmiţi raport +apps/frappe/frappe/model/rename_doc.py +92,"{0} {1} does not exist, select a new target to merge","{0} {1} nu există, selectează un nou obiectiv pentru fuzionare" apps/frappe/frappe/core/page/user_permissions/user_permissions.py +66,Cannot set permission for DocType: {0} and Name: {1},Nu se poate seta permisiunea de DocType: {0} și Nume: {1} DocType: Comment,Comment Doctype,Comment Doctype apps/frappe/frappe/core/page/modules_setup/modules_setup.js +55,There were errors,Au fost erori @@ -850,7 +850,7 @@ apps/frappe/frappe/desk/page/activity/activity.js +153,Dec,Decembrie DocType: Event,Leave blank to repeat always,Lăsați necompletat pentru a repeta mereu DocType: Event,Ends on,Se termină pe apps/frappe/frappe/utils/nestedset.py +181,Item cannot be added to its own descendents,Articol nu poate fi adăugat la propriile descendenți -sites/assets/js/form.min.js +270,{0} created this {1},{0} a creat această {1} +sites/assets/js/form.min.js +270,{0} created this {1},{0} a creat acest {1} apps/frappe/frappe/desk/form/assign_to.py +120,"The task {0}, that you assigned to {1}, has been closed by {2}.","Sarcina {0}, care atribuit {1}, a fost închis de {2}." DocType: Blogger,Short Name,Numele scurt DocType: Workflow State,magnet,magnet @@ -863,12 +863,12 @@ DocType: Custom Field,Is Mandatory Field,Este câmp obligatoriu DocType: User,Website User,Site-ul utilizatorului DocType: Website Script,Script to attach to all web pages.,Script pentru a atașa la toate paginile web. DocType: Web Form,Allow Multiple,Permiteți multiple -sites/assets/js/form.min.js +283,Assign,Atribui +sites/assets/js/form.min.js +283,Assign,Atribuiţi apps/frappe/frappe/config/setup.py +93,Import / Export Data from .csv files.,Import / Export date de la. Fișiere CSV. DocType: Workflow State,Icon will appear on the button,Pictograma va apărea pe butonul DocType: Web Page,Page url name (auto-generated),Nume de pagină url (auto-generat) apps/frappe/frappe/core/page/user_permissions/user_permissions.py +105,Please upload using the same template as download.,Vă rugăm să încărcați folosind același șablon ca și descărcare. -apps/frappe/frappe/modules/__init__.py +81,App not found,App nu a fost găsit +apps/frappe/frappe/modules/__init__.py +81,App not found,Aplicaţia nu a fost găsită DocType: Workflow State,pencil,creion sites/assets/js/form.min.js +277,Share {0} with,Distribuiți {0} cu DocType: Workflow State,hand-up,mână-up @@ -900,7 +900,7 @@ DocType: DocType,In Dialog,În Dialog apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +142,Help,Ajutor DocType: User,Login Before,Înainte de conectare DocType: Web Page,Insert Style,Introduceți Style -apps/frappe/frappe/desk/page/applications/applications.js +94,Application Installer,Installer aplicare +apps/frappe/frappe/desk/page/applications/applications.js +94,Application Installer,Instalator aplicaţie apps/frappe/frappe/core/page/user_permissions/user_permissions.js +246,Is,Este DocType: Workflow State,info-sign,info-semn DocType: Currency,"How should this currency be formatted? If not set, will use system defaults","Cum ar trebui să fie formatata aceasta valuta? Dacă este setat, se vor folosi valorile implicite de sistem" @@ -919,12 +919,12 @@ apps/frappe/frappe/core/doctype/user/user.js +45,Refreshing...,Refreshing ... DocType: Event,Starts on,Începe pe DocType: Workflow State,th,-lea sites/assets/js/desk.min.js +490,Create a new {0},A crea un nou {0} -sites/assets/js/desk.min.js +836,Open {0},Deschis {0} +sites/assets/js/desk.min.js +836,Open {0},Deschide {0} DocType: Workflow State,ok-sign,ok-semn sites/assets/js/form.min.js +158,Duplicate,Duplicat apps/frappe/frappe/email/doctype/email_alert/email_alert.py +16,Please specify which value field must be checked,Vă rugăm să specificați care trebuie verificat de câmp valoare -apps/frappe/frappe/core/page/data_import_tool/exporter.py +69,"""Parent"" signifies the parent table in which this row must be added","""Mamă"" înseamnă tabelul părinte în care trebuie să se adauge acest rând" -DocType: Website Theme,Apply Style,Aplicați Style +apps/frappe/frappe/core/page/data_import_tool/exporter.py +69,"""Parent"" signifies the parent table in which this row must be added","""Părinte"" semnifică tabelul părinte în care trebuie să se adauge acestă înregistrare" +DocType: Website Theme,Apply Style,Aplicați stil sites/assets/js/form.min.js +283,Shared With,În comun cu ,Modules Setup,Module Setup apps/frappe/frappe/core/page/data_import_tool/exporter.py +220,Type:,Tip: @@ -932,36 +932,36 @@ apps/frappe/frappe/desk/moduleview.py +57,Module Not Found,Modulul Nu a fost gă DocType: User,Location,Închiriere ,Permitted Documents For User,Documente permise pentru utilizator apps/frappe/frappe/core/doctype/docshare/docshare.py +33,"You need to have ""Share"" permission","Trebuie să aveți ""Share"" permisiune" -sites/assets/js/form.min.js +210,Bulk Edit {0},Editare în bloc {0} +sites/assets/js/form.min.js +210,Bulk Edit {0},Editare în masă {0} DocType: Email Alert Recipient,Email Alert Recipient,Email-ul destinatarului Alert DocType: About Us Settings,Settings for the About Us Page,Setări pentru pagina Despre noi apps/frappe/frappe/core/page/data_import_tool/data_import_main.html +5,Select Type of Document to Download,Selectați tipul de document pentru a descărca apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +185,Use the field to filter records,Utilizați câmpul pentru a filtra înregistrările DocType: Email Account,Outlook.com,Outlook.com DocType: System Settings,Scheduler Last Event,Scheduler pentru ultimul eveniment -DocType: Website Settings,Add Google Analytics ID: eg. UA-89XXX57-1. Please search help on Google Analytics for more information.,Adauga Google Analytics ID: de ex. UA-89XXX57-1. Vă rugăm să căutați ajutor de la Google Analytics pentru mai multe informații. +DocType: Website Settings,Add Google Analytics ID: eg. UA-89XXX57-1. Please search help on Google Analytics for more information.,Adaugaţi Google Analytics ID: de ex. UA-89XXX57-1. Vă rugăm să căutați ajutor la Google Analytics pentru mai multe informații. DocType: Email Alert Recipient,"Expression, Optional","Expresie, opțional" DocType: Email Account,Check this to pull emails from your mailbox,Bifati pentru a extrage e-mailuri din căsuța poștală apps/frappe/frappe/model/document.py +425,Cannot edit cancelled document,Nu se poate edita documente anulat apps/frappe/frappe/utils/nestedset.py +77,Nested set error. Please contact the Administrator.,Imbricate eroare set. Vă rugăm să contactați administratorul. apps/frappe/frappe/print/page/print_format_builder/print_format_builder_layout.html +11,, DocType: Workflow State,envelope,plic -apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} împărtășit acest document cu {1} +apps/frappe/frappe/core/doctype/docshare/docshare.py +37,{0} shared this document with {1},{0} a partajat acest document cu {1} DocType: Website Settings,Google Plus One,Google Plus One -apps/frappe/frappe/desk/page/activity/activity.js +153,Jul,Iulie +apps/frappe/frappe/desk/page/activity/activity.js +153,Jul,Iul DocType: Communication,Additional Info,Informaţii suplimentare apps/frappe/frappe/config/website.py +44,"Setup of top navigation bar, footer and logo.","Setup de bara de navigare de sus, subsol și logo-ul." apps/frappe/frappe/core/doctype/doctype/doctype.py +352,For {0} at level {1} in {2} in row {3},Pentru {0} la nivel {1} din {2} în rândul {3} DocType: Bulk Email,Recipient,Destinatar apps/frappe/frappe/config/setup.py +137,Drag and Drop tool to build and customize Print Formats.,Drag and drop instrument pentru a construi și personaliza formate de imprimare. -sites/assets/js/desk.min.js +779,Expand,Extinderea -DocType: Workflow State,align-right,alinia-dreapta +sites/assets/js/desk.min.js +779,Expand,Extindere +DocType: Workflow State,align-right,aliniați-dreapta DocType: Page,Roles,Roluri DocType: System Settings,Session Expiry,Sesiunea de expirare -DocType: Workflow State,ban-circle,ban-cerc +DocType: Workflow State,ban-circle,cerc-interzicere DocType: Event,Desk,Birou apps/frappe/frappe/core/doctype/report/report.js +8,Write a SELECT query. Note result is not paged (all data is sent in one go).,Scrie o interogare SELECT. Rezultat notă nu este chemat (toate datele sunt trimise într-un du-te). -DocType: Email Account,Attachment Limit (MB),Limita Attachment (MB) +DocType: Email Account,Attachment Limit (MB),Limita ataşament (MB) sites/assets/js/form.min.js +196,Ctrl + Down,Ctrl + Jos DocType: User,User Defaults,Prestabilite de utilizator DocType: Workflow State,chevron-down,Chevron-jos @@ -970,11 +970,11 @@ DocType: Web Page,Enable Comments,Activați Comentarii DocType: User,Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111),"Restricționa utilizator de numai această adresă IP. Adrese IP multiple pot fi adăugate prin separarea cu virgule. De asemenea, acceptă adrese IP parțiale ca (111.111.111)" DocType: Website Theme,Google Font (Heading),Google Font (rubrica) sites/assets/js/desk.min.js +836,Find {0} in {1},Găsi {0} din {1} -DocType: Email Account,"Append as communication against this DocType (must have fields, ""Status"", ""Subject"")","Adăugați ca comunicare împotriva acestei DocType (trebuie să aibă câmpuri, ""stare"", ""Subiect"")" -DocType: DocType,Allow Import via Data Import Tool,Permite Import Import date prin Instrumentul +DocType: Email Account,"Append as communication against this DocType (must have fields, ""Status"", ""Subject"")","Adăugați ca şi comunicare comparativ acestui tip de document (trebuie să conţină câmpurile, ""stare"", ""subiect"")" +DocType: DocType,Allow Import via Data Import Tool,Permite operaţii de import prin intermediul instrumentului import date apps/frappe/frappe/model/base_document.py +423,Not allowed to change {0} after submission,Nu este permis să se schimbe {0} de la depunerea DocType: Comment,Comment Type,Comentariu Tip -apps/frappe/frappe/config/setup.py +8,Users,Utilizatorii +apps/frappe/frappe/config/setup.py +8,Users,Utilizatori DocType: Email Account,Signature,Semnătura apps/frappe/frappe/config/website.py +84,"Enter keys to enable login via Facebook, Google, GitHub.","Introduceți cheile pentru a permite autentificare prin intermediul Facebook, Google, GitHub." sites/assets/js/list.min.js +67,Add a tag,Adaugă o etichetă @@ -984,18 +984,18 @@ DocType: Website Slideshow Item,Website Slideshow Item,Site-ul Slideshow Articol DocType: DocType,Title Case,Denumirea dosarului DocType: Blog Post,Email Sent,E-mail trimis sites/assets/js/desk.min.js +870,Send As Email,Trimite ca e-mail -DocType: Website Theme,Link Color,Link Color +DocType: Website Theme,Link Color,Culoarea link-ului apps/frappe/frappe/core/doctype/user/user.py +47,User {0} cannot be disabled,Utilizatorul {0} nu poate fi dezactivat apps/frappe/frappe/core/doctype/user/user.py +470,"Dear System Manager,","Dragă System Manager," apps/frappe/frappe/config/setup.py +214,Download Backup,Descarca Backup -sites/assets/js/form.min.js +180,Amending,De modificare +sites/assets/js/form.min.js +180,Amending,Modificând sites/assets/js/desk.min.js +512,Dialog box to select a Link Value,Fereastra de dialog pentru a selecta o valoare de link DocType: Contact Us Settings,Send enquiries to this email address,Trimite întrebări cu privire la această adresă de e-mail DocType: Letter Head,Letter Head Name,Nume scrisoare cap apps/frappe/frappe/config/website.py +23,User editable form on Website.,Utilizatorul formular editabil pe site-ul. DocType: Workflow State,file,fișier apps/frappe/frappe/model/rename_doc.py +98,You need write permission to rename,Ai nevoie de a scrie permisiunea de a redenumi -apps/frappe/frappe/core/page/permission_manager/permission_manager.js +426,Apply Rule,Aplicați Regula +apps/frappe/frappe/core/page/permission_manager/permission_manager.js +426,Apply Rule,Aplicați Regulă DocType: User,Karma,Karma DocType: DocField,Table,Tabela DocType: File Data,File Size,Dimensiune fișier @@ -1005,14 +1005,14 @@ sites/assets/js/form.min.js +261,New Custom Print Format,Nou format personalizat DocType: DocPerm,Create,Creează DocType: About Us Settings,Org History,Org Istorie DocType: Workflow,Workflow Name,Flux de lucru Nume -DocType: Web Form,Allow Edit,Permiteți Editare +DocType: Web Form,Allow Edit,Permiteți operaţii de editare apps/frappe/frappe/workflow/doctype/workflow/workflow.py +64,Cannot change state of Cancelled Document. Transition row {0},Nu se poate schimba starea de Document anulat. Tranziție rând {0} DocType: Workflow,"Rules for how states are transitions, like next state and which role is allowed to change state etc.","Reguli pentru modul în care statele sunt tranzitii, cum ar fi stat lângă și ce rol îi este permis să se schimbe de stat etc" apps/frappe/frappe/desk/form/save.py +21,{0} {1} already exists,{0} {1} există deja DocType: User,Github Username,Github Utilizator DocType: Web Page,Title / headline of your page,Titlu / titlu al paginii dvs. DocType: DocType,Plugin,Plugin -sites/assets/js/desk.min.js +881,Add Attachments,Adăuga atașamente +sites/assets/js/desk.min.js +881,Add Attachments,Adăugaţi atașamente DocType: Workflow State,signal,semnal DocType: DocType,Show Print First,Arată Print Primul DocType: Print Settings,Monochrome,Monocrom @@ -1025,11 +1025,11 @@ sites/assets/js/desk.min.js +439,Invalid Email: {0},Email invalid: {0} apps/frappe/frappe/desk/doctype/event/event.py +16,Event end must be after start,End eveniment trebuie să fie după început apps/frappe/frappe/templates/includes/sidebar.html +7,Back,Înapoi apps/frappe/frappe/desk/query_report.py +21,You don't have permission to get a report on: {0},Nu aveți permisiunea de a obține un raport cu privire la: {0} -sites/assets/js/desk.min.js +493,Advanced Search,Cautare avansata +sites/assets/js/desk.min.js +493,Advanced Search,Cautare avansată apps/frappe/frappe/core/doctype/user/user.py +381,Password reset instructions have been sent to your email,Instrucțiuni de resetare a parolei au fost trimise la adresa dvs. de email apps/frappe/frappe/config/setup.py +223,Manage cloud backups on Dropbox,Gestiona backup nor pe Dropbox DocType: Workflow,States,Statele -DocType: Email Alert,Attach Print,Atașați Print +DocType: Email Alert,Attach Print,Atașați imprimat apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +18,"When you Amend a document after Cancel and save it, it will get a new number that is a version of the old number.","Atunci când modifică un document după anula și salvați-l, acesta va primi un număr nou, care este o versiune a numărului vechi." apps/frappe/frappe/core/doctype/doctype/doctype.py +37,{0} not allowed in name,{0} nu este permis în nume DocType: Workflow State,circle-arrow-left,cerc-săgeată stânga- @@ -1037,11 +1037,11 @@ apps/frappe/frappe/sessions.py +106,Redis cache server not running. Please conta sites/assets/js/desk.min.js +823,Make a new record,Face un nou record DocType: Currency,Fraction,Fracțiune sites/assets/js/desk.min.js +464,Select from existing attachments,Selectați din atașamente existente -DocType: Custom Field,Field Description,Câmp Descriere +DocType: Custom Field,Field Description,Descriere câmp apps/frappe/frappe/model/naming.py +49,Name not set via Prompt,Nume nu a stabilit prin Prompt DocType: Note,Note is a free page where users can share documents / notes,Notă este o pagină gratuit în cazul în care utilizatorii pot partaja documente / note DocType: Website Theme,Top Bar Color,Top Bar Culoare -DocType: DocType,Allow Import,Permiteți Import +DocType: DocType,Allow Import,Permiteți operaţii de importare apps/frappe/frappe/templates/includes/comments/comments.py +57,New comment on {0} {1},Nou comentariu la {0} {1} DocType: Workflow State,glass,sticlă DocType: Country,Time Zones,Time Zones @@ -1052,18 +1052,18 @@ apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +155, DocType: Workflow State,font,font DocType: Customize Form Field,Is Custom Field,Este personalizat câmp DocType: Workflow,"If checked, all other workflows become inactive.","În cazul în care verificat, toate celelalte fluxuri de lucru devin inactive." -apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[Label]: [tip de câmp] / [Opțiuni]: [Lățime] +apps/frappe/frappe/core/doctype/report/report.js +10,[Label]:[Field Type]/[Options]:[Width],[Eticheta]: [Tipul câmpului] / [Opțiuni]: [Lățime] DocType: Workflow State,folder-close,folder-close DocType: Email Alert Recipient,Optional: Alert will only be sent if value is a valid email id.,Optional: Alerta va fi trimis numai dacă valoarea este un id-ul de e-mail validă. -apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} nu este permis să fie redenumite +apps/frappe/frappe/model/rename_doc.py +101,{0} not allowed to be renamed,{0} nu este permisă redenumirea DocType: Custom Script,Custom Script,Script personalizat -DocType: ToDo,Assigned To,Atribuite +DocType: ToDo,Assigned To,Atribuit pentru apps/frappe/frappe/core/doctype/user/user.py +165,Verify Your Account,Verificați contul dvs. DocType: Workflow Transition,Action,Acțiune: apps/frappe/frappe/core/page/data_import_tool/exporter.py +221,Info:,Info: DocType: Custom Field,Permission Level,Nivelul de permisiune DocType: User,Send Notifications for Transactions I Follow,Trimite notificări pentru Tranzacții I Follow -apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write","{0}: Nu se poate seta Trimite, anula, modifică fără scriere" +apps/frappe/frappe/core/doctype/doctype/doctype.py +388,"{0}: Cannot set Submit, Cancel, Amend without Write","{0}: nu se poate configura trimiteți, anulați, modificați fără scrieți" apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +8,Setup > User,Configurare> User apps/frappe/frappe/templates/emails/password_reset.html +6,Thank you,Mulțumesc sites/assets/js/form.min.js +180,Saving,Economisire @@ -1073,7 +1073,7 @@ DocType: Website Settings,Website Theme,Site-ul Theme DocType: DocField,In List View,În Vizualizare listă DocType: Email Account,Use TLS,Utilizați TLS apps/frappe/frappe/email/smtp.py +34,Invalid login or password,Autentificare invalid sau parola -apps/frappe/frappe/config/setup.py +190,Add custom javascript to forms.,Adauga personalizat javascript la forme. +apps/frappe/frappe/config/setup.py +190,Add custom javascript to forms.,Adăugaţi javascript personalizat formelor. ,Role Permissions Manager,Permisiunile rol Director DocType: Website Theme,This must be checked if the below style settings are applicable,Aceasta trebuie să fie verificat dacă se aplică setările de stil de mai jos apps/frappe/frappe/print/page/print_format_builder/print_format_builder.js +111,Name of the new Print Format,Numele de noul format de imprimare @@ -1084,41 +1084,41 @@ DocType: Email Alert,Days Before or After,Zile înainte sau după DocType: Email Alert,Email Alert,Email Alert apps/frappe/frappe/core/page/permission_manager/permission_manager_help.html +34,Select Document Types to set which User Permissions are used to limit access.,Selectați Tipuri de documente pentru a stabili care Permisiunile de utilizare sunt folosite pentru a limita accesul. apps/frappe/frappe/website/doctype/blog_post/blog_post.py +84,Blog,Blog -apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} a a părăsit conversația în {1} {2} +apps/frappe/frappe/email/bulk.py +167,{0} has has left the conversation in {1} {2},{0} a părăsit conversația în {1} {2} DocType: Workflow State,hand-right,mana-dreapta DocType: Website Settings,Subdomain,Subdomeniu -DocType: Web Form,Allow Delete,Permiteți Ștergeți +DocType: Web Form,Allow Delete,Permiteți operaţii de ştergere DocType: Email Alert,Message Examples,Exemple de mesaje DocType: Web Form,Login Required,Intra Obligatoriu apps/frappe/frappe/config/website.py +59,Write titles and introductions to your blog.,Scrie titluri și introduceri la blog-ul. DocType: Email Account,Notify if unreplied for (in mins),Anunta dacă fara raspuns pentru (în minute) apps/frappe/frappe/config/website.py +64,Categorize blog posts.,Clasifica blog. -DocType: DocField,Attach,Ataşare +DocType: DocField,Attach,Ataşaţi DocType: DocType,Permission Rules,Reguli de permisiune sites/assets/js/form.min.js +157,Links,Link-uri apps/frappe/frappe/model/base_document.py +322,Value missing for,Valoare lipsă pentru -apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}: Înregistrare prezentate nu pot fi șterse. +apps/frappe/frappe/model/delete_doc.py +135,{0} {1}: Submitted Record cannot be deleted.,{0} {1}: Înregistrarea introdusă nu poate fi ștearsă. DocType: DocPerm,Read,Citirea apps/frappe/frappe/templates/pages/update-password.html +18,Old Password,Parola Veche apps/frappe/frappe/website/doctype/blog_post/blog_post.py +97,Posts by {0},Mesajele de {0} apps/frappe/frappe/core/doctype/report/report.js +9,"To format columns, give column labels in the query.","Pentru a formata coloanele, da etichete de coloană în interogare." -apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0}: Nu se poate seta Alocați modifică dacă nu Submittable +apps/frappe/frappe/core/doctype/doctype/doctype.py +415,{0}: Cannot set Assign Amend if not Submittable,{0}: nu se poate configura alocați modificare dacă nu există posibilitate de introducere apps/frappe/frappe/core/page/user_permissions/user_permissions.js +14,Edit Role Permissions,Editare permisiuni Role DocType: Social Login Keys,Social Login Keys,Social Autentificare Keys DocType: Comment,Comment Date,Data comentariu apps/frappe/frappe/custom/doctype/customize_form/customize_form.js +54,Remove all customizations?,Elimina toate personalizările? DocType: Website Slideshow,Slideshow Name,Slideshow Nume sites/assets/js/form.min.js +180,Cancelling,Anularea -DocType: DocType,Allow Rename,Permiteți Redenumire +DocType: DocType,Allow Rename,Permiteți operaţii de redenumire DocType: DocType,Child Tables are shown as a Grid in other DocTypes.,Mese pentru copii sunt prezentate ca o grilă în alte doctypes. DocType: Website Settings,"If checked, the Home page will be the default Item Group for the website.","Dacă este bifată, pagina de start va fi elementul Grupul implicit pentru site-ul web." DocType: Blog Post,"Description for listing page, in plain text, only a couple of lines. (max 140 characters)","Descriere pentru pagina de listare, în text simplu, doar o pereche de linii. (Maxim 140 de caractere)" -sites/assets/js/desk.min.js +852,Forums,Pasiunea. -apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,Adauga o restricție de utilizare +sites/assets/js/desk.min.js +852,Forums,Forumuri +apps/frappe/frappe/core/page/user_permissions/user_permissions.js +297,Add A User Restriction,Adăugaţi o restricție pentru un utilizator DocType: DocType,Name Case,Nume de caz apps/frappe/frappe/model/base_document.py +318,Data missing in table,Date dispărute în masă DocType: Web Form,Success URL,URL-ul de succes -DocType: Email Account,Append To,Adăugați Pentru a +DocType: Email Account,Append To,Adăugați pentru DocType: Workflow Document State,Only Allow Edit For,Permiteți numai Editare pentru DocType: DocType,DocType,DocType apps/frappe/frappe/core/doctype/user/user.py +384,User {0} does not exist,Utilizatorul {0} nu există @@ -1126,7 +1126,7 @@ DocType: Website Theme,"If image is selected, color will be ignored.","Dacă est DocType: Top Bar Item,Top Bar Item,Top Bar Articol apps/frappe/frappe/utils/csvutils.py +50,"Unknown file encoding. Tried utf-8, windows-1250, windows-1252.","Codare fișier necunoscut. UTF-8 a încercat, ferestre-1250, Windows-1252." apps/frappe/frappe/core/doctype/user/user.py +103,Sorry! Sharing with Website User is prohibited.,Ne pare rău! Partajarea cu site-ul de utilizare este interzisă. -apps/frappe/frappe/core/doctype/user/user.js +158,Add all roles,Adauga toate rolurile +apps/frappe/frappe/core/doctype/user/user.js +158,Add all roles,Adăugaţi toate rolurile apps/frappe/frappe/templates/includes/contact.js +11,"Please enter both your email and message so that we \ can get back to you. Thanks!","Va rugam sa introduceti atât de e-mail și mesajul dvs., astfel încât să \ poate ajunge înapoi la tine. Multumesc!" @@ -1140,10 +1140,10 @@ DocType: Block Module,Core,Miez DocType: DocField,Set non-standard precision for a Float or Currency field,Set de precizie non-standard pentru un câmp Float sau valuta DocType: Email Account,Ignore attachments over this size,Ignoră atașamentele peste această dimensiune apps/frappe/frappe/database.py +217,Too many writes in one request. Please send smaller requests,"Prea multe, scrie într-o singură cerere. Vă rugăm să trimiteți cereri mai mici" -DocType: Workflow State,arrow-up,săgeată-up -DocType: DocField,Allow on Submit,Permite pe Submit +DocType: Workflow State,arrow-up,săgeată-în sus +DocType: DocField,Allow on Submit,Permiteţi după introducere apps/frappe/frappe/core/page/desktop/desktop.js +48,All Applications,Toate cererile -DocType: Web Page,Add code as <script>,Adăugați un cod ca {%- endif -%} From 89aeb2d3241ef7bfa055f92d715283db0f382e5f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 11 Jun 2015 00:21:04 -0400 Subject: [PATCH 096/219] [fix] Email Account - Checkbox: Always use Account's Email ID as Sender If checked, the sender is replaced with the Email ID mentioned in the Email Account. Used when your email provider does not allow you to send emails from different senders. --- frappe/core/doctype/communication/communication.py | 12 +++++++----- .../email/doctype/email_account/email_account.json | 11 ++++++++++- frappe/email/smtp.py | 5 +++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 3edd675b17..8163163c18 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import import frappe import json from email.utils import formataddr, parseaddr -from frappe.utils import get_url, get_formatted_email, cstr +from frappe.utils import get_url, get_formatted_email, cstr, cint from frappe.utils.file_manager import get_file import frappe.email.smtp from frappe import _ @@ -61,13 +61,15 @@ class Communication(Document): {"append_to": self.reference_doctype, "enable_incoming": 1}, "email_id") self.outgoing_email_account = frappe.db.get_value("Email Account", - {"append_to": self.reference_doctype, "enable_outgoing": 1}, "email_id") + {"append_to": self.reference_doctype, "enable_outgoing": 1}, + ["email_id", "always_use_account_email_id_as_sender"], as_dict=True) if not self.incoming_email_account: self.incoming_email_account = frappe.db.get_value("Email Account", {"default_incoming": 1}, "email_id") if not self.outgoing_email_account: - self.outgoing_email_account = frappe.db.get_value("Email Account", {"default_outgoing": 1}, "email_id") + self.outgoing_email_account = frappe.db.get_value("Email Account", {"default_outgoing": 1}, + ["email_id", "always_use_account_email_id_as_sender"], as_dict=True) or frappe._dict() def notify(self, print_html=None, print_format=None, attachments=None, except_recipient=False): self.prepare_to_notify(print_html, print_format, attachments) @@ -98,8 +100,8 @@ class Communication(Document): self.set_incoming_outgoing_accounts() - if not self.sender: - self.sender = formataddr([frappe.session.data.full_name or "Notification", self.outgoing_email_account]) + if not self.sender or cint(self.outgoing_email_account.always_use_account_email_id_as_sender): + self.sender = formataddr([frappe.session.data.full_name or "Notification", self.outgoing_email_account.email_id]) self.attachments = [] diff --git a/frappe/email/doctype/email_account/email_account.json b/frappe/email/doctype/email_account/email_account.json index c5ea24aa49..a6879b2af3 100644 --- a/frappe/email/doctype/email_account/email_account.json +++ b/frappe/email/doctype/email_account/email_account.json @@ -291,6 +291,15 @@ "permlevel": 0, "precision": "" }, + { + "depends_on": "enable_outgoing", + "description": "Uses the Email ID mentioned in this Account as the Sender for all emails sent using this Account. ", + "fieldname": "always_use_account_email_id_as_sender", + "fieldtype": "Check", + "label": "Always use Account's Email ID as Sender", + "permlevel": 0, + "precision": "" + }, { "allow_on_submit": 0, "fieldname": "signature_section", @@ -419,7 +428,7 @@ "is_submittable": 0, "issingle": 0, "istable": 0, - "modified": "2015-06-02 07:27:15.596220", + "modified": "2015-06-11 00:16:24.026081", "modified_by": "Administrator", "module": "Email", "name": "Email Account", diff --git a/frappe/email/smtp.py b/frappe/email/smtp.py index a6445714cc..0fbf693095 100644 --- a/frappe/email/smtp.py +++ b/frappe/email/smtp.py @@ -21,8 +21,8 @@ def send(email, append_to=None): try: smtpserver = SMTPServer(append_to=append_to) - if hasattr(smtpserver, "always_use_login_id_as_sender") and \ - cint(smtpserver.always_use_login_id_as_sender) and smtpserver.login: + if hasattr(smtpserver, "always_use_account_email_id_as_sender") and \ + cint(smtpserver.always_use_account_email_id_as_sender) and smtpserver.login: if not email.reply_to: email.reply_to = email.sender email.sender = smtpserver.login @@ -120,6 +120,7 @@ class SMTPServer: self.port = self.email_account.smtp_port self.use_ssl = self.email_account.use_tls self.sender = self.email_account.email_id + self.always_use_account_email_id_as_sender = self.email_account.get("always_use_account_email_id_as_sender") @property def sess(self): From b6c1ba69469c27d4686dcef299d001c759765be7 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 11 Jun 2015 00:32:37 -0400 Subject: [PATCH 097/219] [fix] unlink ToDo from assignment comment on trash --- frappe/desk/doctype/todo/todo.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/desk/doctype/todo/todo.py b/frappe/desk/doctype/todo/todo.py index 556fd07f22..f3c6647988 100644 --- a/frappe/desk/doctype/todo/todo.py +++ b/frappe/desk/doctype/todo/todo.py @@ -25,6 +25,10 @@ class ToDo(Document): self.update_in_reference() def on_trash(self): + # unlink assignment comment + frappe.db.sql("""update `tabComment` set reference_doctype=null and reference_name=null + where reference_doctype='ToDo' and reference_name=%s""", self.name) + self.update_in_reference() def add_assign_comment(self, text, comment_type): From a28c465ae10ceb584f4100b650aff41682bbaaed Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 10 Jun 2015 14:12:51 -0400 Subject: [PATCH 098/219] Fixes in web forms --- frappe/templates/includes/list/list.js | 3 +- .../templates/includes/list/row_template.html | 5 +- frappe/templates/pages/list.py | 45 +++++++++++------ frappe/website/doctype/web_form/web_form.py | 50 +++++++++++++++++-- 4 files changed, 82 insertions(+), 21 deletions(-) diff --git a/frappe/templates/includes/list/list.js b/frappe/templates/includes/list/list.js index 467e2cdad7..2d31eda1a5 100644 --- a/frappe/templates/includes/list/list.js +++ b/frappe/templates/includes/list/list.js @@ -9,7 +9,8 @@ frappe.ready(function() { doctype: "{{ doctype }}", txt: "{{ txt or '' }}", limit_start: next_start, - pathname: location.pathname + pathname: location.pathname, + is_web_form: "{{ is_web_form }}" }); btn.prop("disabled", true); diff --git a/frappe/templates/includes/list/row_template.html b/frappe/templates/includes/list/row_template.html index 65fa99305c..599d4f88ac 100644 --- a/frappe/templates/includes/list/row_template.html +++ b/frappe/templates/includes/list/row_template.html @@ -1,7 +1,10 @@ {% set doc = frappe.get_doc(doc) %} {% set subject = doc.get(meta.title_field or "name") %} +{% set route = ((is_web_form is defined and is_web_form and "{0}?name={1}".format(pathname, doc.name)) + or (doc.get("get_route") and doc.get_route()) + or "{0}/{1}".format(pathname or doc.doctype, doc.name)) %} diff --git a/frappe/templates/pages/list.py b/frappe/templates/pages/list.py index ee227ff72b..ee0f3c6ca0 100644 --- a/frappe/templates/pages/list.py +++ b/frappe/templates/pages/list.py @@ -27,18 +27,7 @@ def get(doctype, txt=None, limit_start=0, **kwargs): limit_page_length = 20 next_start = limit_start + limit_page_length - filters = frappe._dict(kwargs) - if filters.pathname: - # resolve additional filters from path - resolve_path(filters.pathname) - for key, val in frappe.local.form_dict.items(): - if key in ("cmd", "pathname", "doctype", "txt", "limit_start"): - if key in filters: - del filters[key] - - elif key not in filters: - filters[key] = val - + filters = prepare_filters(kwargs) meta = frappe.get_meta(doctype) list_context = get_list_context({}, doctype) @@ -73,13 +62,41 @@ def get(doctype, txt=None, limit_start=0, **kwargs): "next_start": next_start } +def prepare_filters(kwargs): + filters = frappe._dict(kwargs) + + if filters.pathname: + # resolve additional filters from path + resolve_path(filters.pathname) + for key, val in frappe.local.form_dict.items(): + if key in ("cmd", "pathname", "doctype", "txt", "limit_start"): + if key in filters: + del filters[key] + + elif key not in filters: + filters[key] = val + + if "is_web_form" in filters: + del filters["is_web_form"] + + return filters + def get_list_context(context, doctype): from frappe.modules import load_doctype_module + from frappe.website.doctype.web_form.web_form import get_web_form_list + + list_context = frappe._dict() module = load_doctype_module(doctype) if hasattr(module, "get_list_context"): - return frappe._dict(module.get_list_context(context) or {}) + list_context = frappe._dict(module.get_list_context(context) or {}) - return frappe._dict() + # is web form + if cint(frappe.local.form_dict.is_web_form): + list_context.is_web_form = 1 + if not list_context.get("get_list"): + list_context.get_list = get_web_form_list + + return list_context def get_list(doctype, txt, filters, limit_start, limit_page_length=20, ignore_permissions=False): meta = frappe.get_meta(doctype) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index 4e098ed5c8..a715686cbd 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -7,7 +7,6 @@ from frappe.website.website_generator import WebsiteGenerator from frappe import _ from frappe.utils.file_manager import save_file, remove_file_by_url from frappe.website.utils import get_comment_list -from frappe.templates.pages.list import get_context as get_list_context class WebForm(WebsiteGenerator): website = frappe._dict( @@ -18,8 +17,20 @@ class WebForm(WebsiteGenerator): ) def get_context(self, context): + from frappe.templates.pages.list import get_context as get_list_context + + frappe.local.form_dict.is_web_form = 1 context.params = frappe.form_dict - if self.login_required and frappe.session.user != "Guest": + logged_in = frappe.session.user != "Guest" + + # check permissions + if not logged_in and frappe.form_dict.name: + frappe.throw(_("You need to be logged in to access this {0}.").format(self.doc_type), frappe.PermissionError) + + if frappe.form_dict.name and not has_web_form_permission(self.doc_type, frappe.form_dict.name): + frappe.throw(_("You don't have the permissions to access this document"), frappe.PermissionError) + + if self.login_required and logged_in: if self.allow_edit: if self.allow_multiple: if not context.params.name and not context.params.new: @@ -27,11 +38,14 @@ class WebForm(WebsiteGenerator): get_list_context(context) context.is_list = True else: - name = frappe.db.get_value(self.doc_type, {"owner": frappe.session.user}, - "name") + name = frappe.db.get_value(self.doc_type, {"owner": frappe.session.user}, "name") if name: frappe.form_dict.name = name + # always render new form if login is not required or doesn't allow editing existing ones + if not self.login_required or not self.allow_edit: + frappe.form_dict.new = 1 + if frappe.form_dict.name or frappe.form_dict.new: context.layout = self.get_layout() context.parents = [{"name": self.get_route(), "title": self.title }] @@ -78,6 +92,9 @@ def accept(): if args.doctype != web_form.doc_type: frappe.throw(_("Invalid Request")) + elif args.name and not web_form.allow_edit: + frappe.throw(_("You are not allowed to update this Web Form Document")) + if args.name: # update doc = frappe.get_doc(args.doctype, args.name) @@ -101,7 +118,7 @@ def accept(): doc.set(fieldname, value) if args.name: - if doc.owner==frappe.session.user: + if has_web_form_permission(doc.doctype, doc.name, "write"): doc.save(ignore_permissions=True) else: # only if permissions are present @@ -141,3 +158,26 @@ def delete(web_form, name): frappe.delete_doc(web_form.doc_type, name, ignore_permissions=True) else: raise frappe.PermissionError, "Not Allowed" + +def has_web_form_permission(doctype, name, ptype='read'): + if frappe.session.user=="Guest": + return False + + # owner matches + elif frappe.db.get_value(doctype, name, "owner")==frappe.session.user: + return True + + elif frappe.has_website_permission(doctype, ptype=ptype, doc=name): + return True + + else: + return False + +def get_web_form_list(doctype, txt, filters, limit_start, limit_page_length=20): + from frappe.templates.pages.list import get_list + if not filters: + filters = {} + + filters["owner"] = frappe.session.user + + return get_list(doctype, txt, filters, limit_start, limit_page_length, ignore_permissions=True) From 746043ba30d6cd6ab2eb3edf30a633ea6356f97f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 11 Jun 2015 00:50:51 -0400 Subject: [PATCH 099/219] [fix] set comment by fullname if missing --- frappe/core/doctype/comment/comment.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index 76f7532a2b..57e688a8f6 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -7,6 +7,7 @@ from frappe import _ from frappe.website.render import clear_cache from frappe.model.document import Document from frappe.model.db_schema import add_column +from frappe.utils import get_fullname class Comment(Document): """Comments are added to Documents via forms or views like blogs etc.""" @@ -38,6 +39,9 @@ class Comment(Document): and comment_docname=%s""", (self.doctype, self.name))[0][0] >= 50: frappe.throw(_("Cannot add more than 50 comments")) + if not self.comment_by_fullname and self.comment_by: + self.comment_by_fullname = get_fullname(self.comment_by) + def on_update(self): """Updates `_comments` property in parent Document.""" self.update_comment_in_doc() From 529751db69a4d23c9e6187d426880069fc854dec Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 11 Jun 2015 01:53:53 -0400 Subject: [PATCH 100/219] [fix] email threading when sender's email client does not support Message-ID passing via In-Reply-To For eg. when a System User is using Outlook and replies to an email from their own client, it reaches the Email Account with the threading info lost and the (sender + subject match) doesn't work because the sender in the first communication was someone different to whom the system user is replying to via the common email account in Frappe. This fix bypasses the sender match when the sender is a system user and subject is atleast 10 chars long (for additional safety) --- .../email/doctype/email_account/email_account.py | 15 ++++++++++++--- frappe/utils/user.py | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/frappe/email/doctype/email_account/email_account.py b/frappe/email/doctype/email_account/email_account.py index e6a7449a3c..04be4ed5cf 100644 --- a/frappe/email/doctype/email_account/email_account.py +++ b/frappe/email/doctype/email_account/email_account.py @@ -5,7 +5,8 @@ from __future__ import unicode_literals import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import validate_email_add, cint, get_datetime, DATE_FORMAT +from frappe.utils import validate_email_add, cint, get_datetime, DATE_FORMAT, strip +from frappe.utils.user import is_system_user from frappe.email.smtp import SMTPServer from frappe.email.receive import POP3Server, Email from poplib import error_proto @@ -204,8 +205,7 @@ class EmailAccount(Document): # try and match by subject and sender # if sent by same sender with same subject, # append it to old coversation - - subject = re.sub("(Re|RE)[^:]*:\s*", "", email.subject) + subject = strip(re.sub("^\s*(Re|RE)[^:]*:\s*", "", email.subject)) parent = frappe.db.get_all(self.append_to, filters={ sender_field: email.from_email, @@ -213,6 +213,15 @@ class EmailAccount(Document): "creation": (">", (get_datetime() - relativedelta(days=10)).strftime(DATE_FORMAT)) }, fields="name") + # match only subject field + # when the from_email is of a user in the system + # and subject is atleast 10 chars long + if not parent and len(subject) > 10 and is_system_user(email.from_email): + parent = frappe.db.get_all(self.append_to, filters={ + subject_field: ("like", "%{0}%".format(subject)), + "creation": (">", (get_datetime() - relativedelta(days=10)).strftime(DATE_FORMAT)) + }, fields="name") + else: # try and match by sender only # as there is no subject field, it implies that threading isn't by subject, but by sender only diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 98cce5297c..64b00f4e56 100644 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -285,3 +285,6 @@ def get_enabled_system_users(): def is_website_user(): return frappe.get_user().doc.user_type == "Website User" + +def is_system_user(username): + return frappe.db.get_value("User", {"name": username, "enabled": 1, "user_type": "System User"}) From adf6d2f80431a8ee99c99f0480949edf2b08bba1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 Jun 2015 16:08:42 +0530 Subject: [PATCH 101/219] [fix] 'Assigned To' field renamed to 'Allocated To' in ToDo, to remove conflict with global assigned-to --- frappe/desk/doctype/todo/todo.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/todo/todo.json b/frappe/desk/doctype/todo/todo.json index bc15fd397e..ce1e17cf72 100644 --- a/frappe/desk/doctype/todo/todo.json +++ b/frappe/desk/doctype/todo/todo.json @@ -86,7 +86,7 @@ "fieldtype": "Link", "ignore_user_permissions": 1, "in_list_view": 0, - "label": "Assigned To", + "label": "Allocated To", "options": "User", "permlevel": 0, "reqd": 1 @@ -178,7 +178,7 @@ "in_dialog": 0, "issingle": 0, "max_attachments": 0, - "modified": "2015-05-04 07:44:46.567785", + "modified": "2015-06-11 16:06:34.561469", "modified_by": "Administrator", "module": "Desk", "name": "ToDo", From fd01a654eef725a1c4ae3d6ec4c1ab3e22bb55c8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 Jun 2015 16:43:57 +0600 Subject: [PATCH 102/219] bumped to version 5.0.25 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index 80acb89939..a077d2eae1 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "5.0.24" +__version__ = "5.0.25" diff --git a/frappe/hooks.py b/frappe/hooks.py index fa2a16b0c1..a5e2389291 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -4,7 +4,7 @@ app_title = "Frappe Framework" app_publisher = "Frappe Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "octicon octicon-circuit-board" -app_version = "5.0.24" +app_version = "5.0.25" app_color = "orange" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index f1b3526624..589f8fb64f 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = "5.0.24" +version = "5.0.25" with open("requirements.txt", "r") as f: install_requires = f.readlines() From 398336bd64f13cdb7fd6677681f3ef9299446e4e Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 12 Jun 2015 18:03:44 -0400 Subject: [PATCH 103/219] [fix] Linked With - also remove msgprint when catching PermissionError --- frappe/desk/form/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/desk/form/utils.py b/frappe/desk/form/utils.py index b199417f0f..75e0248fb8 100644 --- a/frappe/desk/form/utils.py +++ b/frappe/desk/form/utils.py @@ -144,6 +144,7 @@ def get_linked_docs(doctype, name, metadata_loaded=None, no_metadata=False): filters=[[dt, link.get("fieldname"), '=', name]]) except frappe.PermissionError: + frappe.local.message_log.pop() continue if ret: From aecd0f13bc8987ae55be5ed1e7b277b9dd01e398 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 12 Jun 2015 18:34:38 -0400 Subject: [PATCH 104/219] [fix] Data Export - export date and datetime in user's format --- .../page/data_import_tool/data_import_tool.js | 3 ++- frappe/core/page/data_import_tool/exporter.py | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/frappe/core/page/data_import_tool/data_import_tool.js b/frappe/core/page/data_import_tool/data_import_tool.js index 7a04417e4b..5e349f7d6d 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.js +++ b/frappe/core/page/data_import_tool/data_import_tool.js @@ -23,8 +23,9 @@ frappe.DataImportTool = Class.extend({ if(in_list(frappe.boot.user.can_import, doctype)) { this.select.val(doctype).change(); - frappe.route_options = null; } + + frappe.route_options = null; }, make: function() { var me = this; diff --git a/frappe/core/page/data_import_tool/exporter.py b/frappe/core/page/data_import_tool/exporter.py index 19168e12c8..96922e8d8f 100644 --- a/frappe/core/page/data_import_tool/exporter.py +++ b/frappe/core/page/data_import_tool/exporter.py @@ -8,7 +8,7 @@ from frappe import _ import frappe.permissions import re from frappe.utils.csvutils import UnicodeWriter -from frappe.utils import cstr, cint, flt +from frappe.utils import cstr, cint, flt, formatdate, format_datetime from frappe.core.page.data_import_tool.data_import_tool import get_data_keys reflags = { @@ -31,7 +31,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data if len(doctype) > 1: docs_to_export = doctype[1] doctype = doctype[0] - + if not parent_doctype: parent_doctype = doctype @@ -46,7 +46,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data def get_data_keys_definition(): return get_data_keys() - + def add_main_header(): w.writerow([_('Data Import Template')]) w.writerow([get_data_keys_definition().main_table, doctype]) @@ -155,6 +155,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data def add_data(): def add_data_row(row_group, dt, doc, rowidx): d = doc.copy() + meta = frappe.get_meta(dt) if all_doctypes: d.name = '"'+ d.name+'"' @@ -162,7 +163,16 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data row_group.append([""] * (len(columns) + 1)) row = row_group[rowidx] for i, c in enumerate(columns[column_start_end[dt].start:column_start_end[dt].end]): - row[column_start_end[dt].start + i + 1] = d.get(c, "") + df = meta.get_field(c) + fieldtype = df.fieldtype if df else "Data" + value = d.get(c, "") + if value: + if fieldtype == "Date": + value = formatdate(value) + elif fieldtype == "Datetime": + value = format_datetime(value) + + row[column_start_end[dt].start + i + 1] = value if with_data=='Yes': frappe.permissions.can_export(parent_doctype, raise_exception=True) @@ -172,7 +182,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data for doc in data: op = docs_to_export.get("op") names = docs_to_export.get("name") - + if names and op: if op == '=' and doc.name not in names: continue @@ -184,7 +194,7 @@ def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data flags = 0 for a in re.split('\W+',sflags): flags = flags | reflags.get(a,0) - + c = re.compile(names, flags) m = c.match(doc.name) if not m: From 9a28afc17b742348bca72c2be76a38f713b7715f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 12 Jun 2015 18:45:29 -0400 Subject: [PATCH 105/219] [fix] Use favicon from Website Settings --- frappe/website/doctype/website_settings/website_settings.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index ff9696dfd8..fb5b34a83f 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -94,7 +94,7 @@ def get_website_settings(): settings = frappe.get_doc("Website Settings", "Website Settings") for k in ["banner_html", "brand_html", "copyright", "twitter_share_via", - "favicon", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share", + "facebook_share", "google_plus_one", "twitter_share", "linked_in_share", "disable_signup", "hide_footer_signup"]: if hasattr(settings, k): context[k] = settings.get(k) @@ -130,5 +130,8 @@ def get_website_settings(): if not context.get("favicon"): context["favicon"] = "/assets/frappe/images/favicon.png" + if settings.favicon: + context["favicon"] = settings.favicon + return context From 08a291c45e260fbba7e97edd05375dace2708d20 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 15 Jun 2015 11:04:37 +0600 Subject: [PATCH 106/219] bumped to version 5.0.26 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index a077d2eae1..c6feb89eaa 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "5.0.25" +__version__ = "5.0.26" diff --git a/frappe/hooks.py b/frappe/hooks.py index a5e2389291..488e9b43fb 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -4,7 +4,7 @@ app_title = "Frappe Framework" app_publisher = "Frappe Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "octicon octicon-circuit-board" -app_version = "5.0.25" +app_version = "5.0.26" app_color = "orange" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index 589f8fb64f..2092453bea 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = "5.0.25" +version = "5.0.26" with open("requirements.txt", "r") as f: install_requires = f.readlines() From 0c646bf5eaa258520f1f1d9f8e0920dc9af41883 Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Mon, 15 Jun 2015 17:47:22 +0530 Subject: [PATCH 107/219] [fix] force import json fixtures --- frappe/core/page/data_import_tool/data_import_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/page/data_import_tool/data_import_tool.py b/frappe/core/page/data_import_tool/data_import_tool.py index 39f80a2aef..8c44c7088a 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.py +++ b/frappe/core/page/data_import_tool/data_import_tool.py @@ -89,7 +89,7 @@ def import_doc(path, overwrite=False, ignore_links=False, ignore_insert=False, i for f in files: if f.endswith(".json"): frappe.flags.mute_emails = True - frappe.modules.import_file.import_file_by_path(f, data_import=True) + frappe.modules.import_file.import_file_by_path(f, data_import=True, force=True) frappe.flags.mute_emails = False elif f.endswith(".csv"): import_file_by_path(f, ignore_links=ignore_links, overwrite=overwrite, submit=submit) From 7c392adb51583d7e0341a4376698ffadd9e305a3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 Jun 2015 14:48:37 +0530 Subject: [PATCH 108/219] [fix] Consider microseconds in to_timedelta function --- frappe/utils/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/data.py b/frappe/utils/data.py index ff39a85fee..6f844e570c 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -57,7 +57,7 @@ def get_datetime(datetime_str=None): def to_timedelta(time_str): if isinstance(time_str, basestring): t = parser.parse(time_str) - return datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) + return datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond) else: return time_str From af3b2c325c9e414ed83e698711bba5c811fa87bc Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 Jun 2015 17:20:08 +0600 Subject: [PATCH 109/219] bumped to version 5.0.27 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index c6feb89eaa..a8ff913062 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "5.0.26" +__version__ = "5.0.27" diff --git a/frappe/hooks.py b/frappe/hooks.py index 488e9b43fb..26dfcd7140 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -4,7 +4,7 @@ app_title = "Frappe Framework" app_publisher = "Frappe Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "octicon octicon-circuit-board" -app_version = "5.0.26" +app_version = "5.0.27" app_color = "orange" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index 2092453bea..f5652a7fa2 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = "5.0.26" +version = "5.0.27" with open("requirements.txt", "r") as f: install_requires = f.readlines() From 3313acf58ce4ae2756de1d9fee9c6c18d26fd65e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 18 Jun 2015 15:37:51 +0530 Subject: [PATCH 110/219] minor fix --- frappe/model/base_document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index ddb10f0e5f..1b1116e55b 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -524,7 +524,7 @@ class BaseDocument(object): def cast(self, val, df): if df.fieldtype in ("Currency", "Float", "Percent"): - val = flt(val, self.precision(df.fieldname)) + val = flt(val) elif df.fieldtype in ("Int", "Check"): val = cint(val) From 1137e02447582d0ab3faf944b220ce50f1d8f4c0 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 18 Jun 2015 16:04:26 +0530 Subject: [PATCH 111/219] Auto suggesting tags should not be case sensitive --- frappe/public/js/frappe/ui/tags.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/ui/tags.js b/frappe/public/js/frappe/ui/tags.js index 31699a3c67..ed74e58956 100644 --- a/frappe/public/js/frappe/ui/tags.js +++ b/frappe/public/js/frappe/ui/tags.js @@ -67,7 +67,7 @@ frappe.ui.TagEditor = Class.extend({ method:"frappe.desk.tags.get_tags", args:{ doctype: me.frm.doctype, - txt: request.term + txt: request.term.toLowerCase() }, callback: function(r) { response(r.message); From da2c7c8683dd0dbd7223b74e2d76c9244223e635 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 18 Jun 2015 16:51:50 +0530 Subject: [PATCH 112/219] Show all recipients in sent-to message --- .../doctype/communication/communication.py | 18 +++++++++++------- frappe/public/js/frappe/views/communication.js | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 8163163c18..70f788e569 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -44,14 +44,14 @@ class Communication(Document): frappe.db.set_value(parent.doctype, parent.name, "status", to_status) def send(self, print_html=None, print_format=None, attachments=None, - send_me_a_copy=False): + send_me_a_copy=False, recipients=None): """Send communication via Email. :param print_html: Send given value as HTML attachment. :param print_format: Attach print format of parent document.""" self.send_me_a_copy = send_me_a_copy - self.notify(print_html, print_format, attachments) + self.notify(print_html, print_format, attachments, recipients) def set_incoming_outgoing_accounts(self): self.incoming_email_account = self.outgoing_email_account = None @@ -71,9 +71,10 @@ class Communication(Document): self.outgoing_email_account = frappe.db.get_value("Email Account", {"default_outgoing": 1}, ["email_id", "always_use_account_email_id_as_sender"], as_dict=True) or frappe._dict() - def notify(self, print_html=None, print_format=None, attachments=None, except_recipient=False): + def notify(self, print_html=None, print_format=None, attachments=None, except_recipient=False, recipients=None): self.prepare_to_notify(print_html, print_format, attachments) - recipients = self.get_recipients(except_recipient=except_recipient) + if not recipients: + recipients = self.get_recipients(except_recipient=except_recipient) frappe.sendmail( recipients=recipients, @@ -246,11 +247,14 @@ def make(doctype=None, name=None, content=None, subject=None, sent_or_received = "reference_name": name }) comm.insert(ignore_permissions=True) - + + recipients = None if send_email: - comm.send(print_html, print_format, attachments, send_me_a_copy=send_me_a_copy) + comm.send_me_a_copy = send_me_a_copy + recipients = comm.get_recipients() + comm.send(print_html, print_format, attachments, send_me_a_copy=send_me_a_copy, recipients=recipients) - return comm.name + return ", ".join(recipients) if recipients else None @frappe.whitelist() def get_convert_to(): diff --git a/frappe/public/js/frappe/views/communication.js b/frappe/public/js/frappe/views/communication.js index 1beb94539e..7fc317bb9c 100644 --- a/frappe/public/js/frappe/views/communication.js +++ b/frappe/public/js/frappe/views/communication.js @@ -328,7 +328,7 @@ frappe.views.CommunicationComposer = Class.extend({ callback: function(r) { if(!r.exc) { if(form_values.send_email) - msgprint(__("Email sent to {0}", [form_values.recipients])); + msgprint(__("Email sent to {0}", [r.message])); me.dialog.hide(); if (cur_frm) { From 17e5fe7d24a66521028eb5f52936ba4079ffea3f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 18 Jun 2015 12:45:35 -0400 Subject: [PATCH 113/219] Use GET type for asset request so that it doesn't commit --- frappe/public/js/frappe/assets.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/public/js/frappe/assets.js b/frappe/public/js/frappe/assets.js index 7340b19ae4..018e0a7c4e 100644 --- a/frappe/public/js/frappe/assets.js +++ b/frappe/public/js/frappe/assets.js @@ -92,6 +92,7 @@ frappe.assets = { // *without* the template frappe.call({ + type: "GET", method:"frappe.client.get_js", args: { "src": src From 28c24babef8a7dcfa025348e5e6015426b69a1d7 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 18 Jun 2015 12:47:32 -0400 Subject: [PATCH 114/219] [fix] rendering of all day events and invalid date issue. Fixes frappe/erpnext#3348, frappe/erpnext#3474, #1161 --- frappe/public/js/frappe/request.js | 13 +- frappe/public/js/frappe/views/calendar.js | 48 +- .../js/lib/fullcalendar/fullcalendar.css | 977 -- .../js/lib/fullcalendar/fullcalendar.js | 9264 ----------------- .../js/lib/fullcalendar/fullcalendar.min.css | 5 + .../js/lib/fullcalendar/fullcalendar.min.js | 8 + .../lib/fullcalendar/fullcalendar.print.css | 6 +- frappe/public/js/lib/fullcalendar/gcal.js | 11 +- frappe/public/js/lib/moment/moment.min.js | 2 +- 9 files changed, 68 insertions(+), 10266 deletions(-) delete mode 100755 frappe/public/js/lib/fullcalendar/fullcalendar.css delete mode 100755 frappe/public/js/lib/fullcalendar/fullcalendar.js create mode 100755 frappe/public/js/lib/fullcalendar/fullcalendar.min.css create mode 100755 frappe/public/js/lib/fullcalendar/fullcalendar.min.js diff --git a/frappe/public/js/frappe/request.js b/frappe/public/js/frappe/request.js index 8d3f60c191..5e200fc442 100644 --- a/frappe/public/js/frappe/request.js +++ b/frappe/public/js/frappe/request.js @@ -81,9 +81,16 @@ frappe.request.call = function(opts) { msgprint(__("File size exceeded the maximum allowed size of {0} MB", [(frappe.boot.max_file_size || 5242880) / 1048576])) }, - 417: function(data, xhr) { - if(typeof data === "string") data = JSON.parse(data); - opts.error_callback && opts.error_callback(data, xhr.responseText); + 417: function(xhr) { + var r = xhr.responseJSON; + if (!r) { + try { + r = JSON.parse(xhr.responseText); + } catch (e) { + r = xhr.responseText; + } + } + opts.error_callback && opts.error_callback(r); }, 501: function(data, xhr) { if(typeof data === "string") data = JSON.parse(data); diff --git a/frappe/public/js/frappe/views/calendar.js b/frappe/public/js/frappe/views/calendar.js index 92eb293404..58a2ffaae4 100644 --- a/frappe/public/js/frappe/views/calendar.js +++ b/frappe/public/js/frappe/views/calendar.js @@ -8,8 +8,8 @@ frappe.views.CalendarFactory = frappe.views.Factory.extend({ make: function(route) { var me = this; - frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.css'); - frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.js'); + frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.min.css'); + frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.min.js'); frappe.model.with_doctype(route[1], function() { var options = { @@ -53,7 +53,10 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ "default": frappe.datetime.month_start(), input_css: {"z-index": 1}, change: function() { - me.$cal.fullCalendar("gotoDate", $(this).val()); + var selected = $(this).val(); + if (selected) { + me.$cal.fullCalendar("gotoDate", frappe.datetime.user_to_obj(selected)); + } } }); @@ -139,6 +142,7 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ editable: true, selectable: true, selectHelper: true, + forceEventDuration: true, events: function(start, end, timezone, callback) { return frappe.call({ method: me.get_events_method || "frappe.desk.calendar.get_events", @@ -158,10 +162,10 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ frappe.set_route("Form", doctype, event.name); } }, - eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) { + eventDrop: function(event, delta, revertFunc, jsEvent, ui, view) { me.update_event(event, revertFunc); }, - eventResize: function(event, dayDelta, minuteDelta, allDay, revertFunc) { + eventResize: function(event, delta, revertFunc, jsEvent, ui, view) { me.update_event(event, revertFunc); }, select: function(startDate, endDate, jsEvent, view) { @@ -184,10 +188,9 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ event[me.field_map.allDay] = all_day; if (all_day) - event[me.field_map.end] = me.get_system_datetime(endDate.subtract(1, "s")); + event[me.field_map.end] = me.get_system_datetime(moment(endDate).subtract(1, "s")); } - frappe.set_route("Form", me.doctype, event.name); }, dayClick: function(date, allDay, jsEvent, view) { @@ -227,12 +230,14 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ d[target] = d[source]; }); + if(!me.field_map.allDay) + d.allDay = 1; + // convert to user tz d.start = frappe.datetime.convert_to_user_tz(d.start); d.end = frappe.datetime.convert_to_user_tz(d.end); - if(!me.field_map.allDay) - d.allDay = 1; + me.fix_end_date_for_event_render(d); if(d.status) { if(me.style_map) { @@ -254,31 +259,46 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ args: me.get_update_args(event), callback: function(r) { if(r.exc) { - show_alert("Unable to update event.") + show_alert(__("Unable to update event")); revertFunc(); } + }, + error: function() { + revertFunc(); } }); }, get_update_args: function(event) { + var me = this; var args = { name: event[this.field_map.id] }; + args[this.field_map.start] = me.get_system_datetime(event.start); if(this.field_map.allDay) - args[this.field_map.allDay] = event.allDay ? 1 : 0; + args[this.field_map.allDay] = (event.start._ambigTime && event.end._ambigTime) ? 1 : 0; if(this.field_map.end) { + if (!event.end) { + event.end = event.start.add(1, "hour"); + } + if (args[this.field_map.allDay]) { - args[this.field_map.end] = me.get_system_datetime(event.start); - } else if (event.end) { - args[this.field_map.end] = me.get_system_datetime(event.end); + args[this.field_map.end] = me.get_system_datetime(moment(event.end).subtract(1, "s")); } } args.doctype = event.doctype || this.doctype; return { args: args, field_map: this.field_map }; + }, + + fix_end_date_for_event_render: function(event) { + if (event.allDay) { + // We use inclusive end dates. This workaround fixes the rendering of events + event.start = event.start ? $.fullCalendar.moment(event.start).stripTime() : null; + event.end = event.end ? $.fullCalendar.moment(event.end).add(1, "day").stripTime() : null; + } } }) diff --git a/frappe/public/js/lib/fullcalendar/fullcalendar.css b/frappe/public/js/lib/fullcalendar/fullcalendar.css deleted file mode 100755 index 95896bc841..0000000000 --- a/frappe/public/js/lib/fullcalendar/fullcalendar.css +++ /dev/null @@ -1,977 +0,0 @@ -/*! - * FullCalendar v2.2.3 Stylesheet - * Docs & License: http://arshaw.com/fullcalendar/ - * (c) 2013 Adam Shaw - */ - - -.fc { - direction: ltr; - text-align: left; -} - -.fc-rtl { - text-align: right; -} - -body .fc { /* extra precedence to overcome jqui */ - font-size: 1em; -} - - -/* Colors ---------------------------------------------------------------------------------------------------*/ - -.fc-unthemed th, -.fc-unthemed td, -.fc-unthemed hr, -.fc-unthemed thead, -.fc-unthemed tbody, -.fc-unthemed .fc-row, -.fc-unthemed .fc-popover { - border-color: #ddd; -} - -.fc-unthemed .fc-popover { - background-color: #fff; -} - -.fc-unthemed hr, -.fc-unthemed .fc-popover .fc-header { - background: #eee; -} - -.fc-unthemed .fc-popover .fc-header .fc-close { - color: #666; -} - -.fc-unthemed .fc-today { - background: #fcf8e3; -} - -.fc-highlight { /* when user is selecting cells */ - background: #bce8f1; - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-bgevent { /* default look for background events */ - background: rgb(143, 223, 130); - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-nonbusiness { /* default look for non-business-hours areas */ - /* will inherit .fc-bgevent's styles */ - background: #ccc; -} - - -/* Icons (inline elements with styled text that mock arrow icons) ---------------------------------------------------------------------------------------------------*/ - -.fc-icon { - display: inline-block; - font-size: 2em; - line-height: .5em; - height: .5em; /* will make the total height 1em */ - font-family: "Courier New", Courier, monospace; -} - -.fc-icon-left-single-arrow:after { - content: "\02039"; - font-weight: bold; -} - -.fc-icon-right-single-arrow:after { - content: "\0203A"; - font-weight: bold; -} - -.fc-icon-left-double-arrow:after { - content: "\000AB"; -} - -.fc-icon-right-double-arrow:after { - content: "\000BB"; -} - -.fc-icon-x:after { - content: "\000D7"; -} - - -/* Buttons (styled ' - ) - .click(function() { - // don't process clicks for disabled buttons - if (!button.hasClass(tm + '-state-disabled')) { - - buttonClick(); - - // after the click action, if the button becomes the "active" tab, or disabled, - // it should never have a hover class, so remove it now. - if ( - button.hasClass(tm + '-state-active') || - button.hasClass(tm + '-state-disabled') - ) { - button.removeClass(tm + '-state-hover'); - } - } - }) - .mousedown(function() { - // the *down* effect (mouse pressed in). - // only on buttons that are not the "active" tab, or disabled - button - .not('.' + tm + '-state-active') - .not('.' + tm + '-state-disabled') - .addClass(tm + '-state-down'); - }) - .mouseup(function() { - // undo the *down* effect - button.removeClass(tm + '-state-down'); - }) - .hover( - function() { - // the *hover* effect. - // only on buttons that are not the "active" tab, or disabled - button - .not('.' + tm + '-state-active') - .not('.' + tm + '-state-disabled') - .addClass(tm + '-state-hover'); - }, - function() { - // undo the *hover* effect - button - .removeClass(tm + '-state-hover') - .removeClass(tm + '-state-down'); // if mouseleave happens before mouseup - } - ); - - groupChildren = groupChildren.add(button); - } - } - }); - - if (isOnlyButtons) { - groupChildren - .first().addClass(tm + '-corner-left').end() - .last().addClass(tm + '-corner-right').end(); - } - - if (groupChildren.length > 1) { - groupEl = $('
    '); - if (isOnlyButtons) { - groupEl.addClass('fc-button-group'); - } - groupEl.append(groupChildren); - sectionEl.append(groupEl); - } - else { - sectionEl.append(groupChildren); // 1 or 0 children - } - }); - } - - return sectionEl; - } - - - function updateTitle(text) { - el.find('h2').text(text); - } - - - function activateButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .addClass(tm + '-state-active'); - } - - - function deactivateButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .removeClass(tm + '-state-active'); - } - - - function disableButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .attr('disabled', 'disabled') - .addClass(tm + '-state-disabled'); - } - - - function enableButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .removeAttr('disabled') - .removeClass(tm + '-state-disabled'); - } - - - function getViewsWithButtons() { - return viewsWithButtons; - } - -} - -;; - -fc.sourceNormalizers = []; -fc.sourceFetchers = []; - -var ajaxDefaults = { - dataType: 'json', - cache: false -}; - -var eventGUID = 1; - - -function EventManager(options) { // assumed to be a calendar - var t = this; - - - // exports - t.isFetchNeeded = isFetchNeeded; - t.fetchEvents = fetchEvents; - t.addEventSource = addEventSource; - t.removeEventSource = removeEventSource; - t.updateEvent = updateEvent; - t.renderEvent = renderEvent; - t.removeEvents = removeEvents; - t.clientEvents = clientEvents; - t.mutateEvent = mutateEvent; - - - // imports - var trigger = t.trigger; - var getView = t.getView; - var reportEvents = t.reportEvents; - var getEventEnd = t.getEventEnd; - - - // locals - var stickySource = { events: [] }; - var sources = [ stickySource ]; - var rangeStart, rangeEnd; - var currentFetchID = 0; - var pendingSourceCnt = 0; - var loadingLevel = 0; - var cache = []; // holds events that have already been expanded - - - $.each( - (options.events ? [ options.events ] : []).concat(options.eventSources || []), - function(i, sourceInput) { - var source = buildEventSource(sourceInput); - if (source) { - sources.push(source); - } - } - ); - - - - /* Fetching - -----------------------------------------------------------------------------*/ - - - function isFetchNeeded(start, end) { - return !rangeStart || // nothing has been fetched yet? - // or, a part of the new range is outside of the old range? (after normalizing) - start.clone().stripZone() < rangeStart.clone().stripZone() || - end.clone().stripZone() > rangeEnd.clone().stripZone(); - } - - - function fetchEvents(start, end) { - rangeStart = start; - rangeEnd = end; - cache = []; - var fetchID = ++currentFetchID; - var len = sources.length; - pendingSourceCnt = len; - for (var i=0; i= eventStart && end <= eventEnd; - } - - - // Does the event's date range intersect with the given range? - // start/end already assumed to have stripped zones :( - function eventIntersectsRange(event, start, end) { - var eventStart = event.start.clone().stripZone(); - var eventEnd = t.getEventEnd(event).stripZone(); - - return start < eventEnd && end > eventStart; - } - -} - - -// updates the "backup" properties, which are preserved in order to compute diffs later on. -function backupEventDates(event) { - event._allDay = event.allDay; - event._start = event.start.clone(); - event._end = event.end ? event.end.clone() : null; -} - -;; - -/* FullCalendar-specific DOM Utilities -----------------------------------------------------------------------------------------------------------------------*/ - - -// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left -// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that. -function compensateScroll(rowEls, scrollbarWidths) { - if (scrollbarWidths.left) { - rowEls.css({ - 'border-left-width': 1, - 'margin-left': scrollbarWidths.left - 1 - }); - } - if (scrollbarWidths.right) { - rowEls.css({ - 'border-right-width': 1, - 'margin-right': scrollbarWidths.right - 1 - }); - } -} - - -// Undoes compensateScroll and restores all borders/margins -function uncompensateScroll(rowEls) { - rowEls.css({ - 'margin-left': '', - 'margin-right': '', - 'border-left-width': '', - 'border-right-width': '' - }); -} - - -// Make the mouse cursor express that an event is not allowed in the current area -function disableCursor() { - $('body').addClass('fc-not-allowed'); -} - - -// Returns the mouse cursor to its original look -function enableCursor() { - $('body').removeClass('fc-not-allowed'); -} - - -// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate. -// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering -// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and -// reduces the available height. -function distributeHeight(els, availableHeight, shouldRedistribute) { - - // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions, - // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars. - - var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element - var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE* - var flexEls = []; // elements that are allowed to expand. array of DOM nodes - var flexOffsets = []; // amount of vertical space it takes up - var flexHeights = []; // actual css height - var usedHeight = 0; - - undistributeHeight(els); // give all elements their natural height - - // find elements that are below the recommended height (expandable). - // important to query for heights in a single first pass (to avoid reflow oscillation). - els.each(function(i, el) { - var minOffset = i === els.length - 1 ? minOffset2 : minOffset1; - var naturalOffset = $(el).outerHeight(true); - - if (naturalOffset < minOffset) { - flexEls.push(el); - flexOffsets.push(naturalOffset); - flexHeights.push($(el).height()); - } - else { - // this element stretches past recommended height (non-expandable). mark the space as occupied. - usedHeight += naturalOffset; - } - }); - - // readjust the recommended height to only consider the height available to non-maxed-out rows. - if (shouldRedistribute) { - availableHeight -= usedHeight; - minOffset1 = Math.floor(availableHeight / flexEls.length); - minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE* - } - - // assign heights to all expandable elements - $(flexEls).each(function(i, el) { - var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1; - var naturalOffset = flexOffsets[i]; - var naturalHeight = flexHeights[i]; - var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding - - if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things - $(el).height(newHeight); - } - }); -} - - -// Undoes distrubuteHeight, restoring all els to their natural height -function undistributeHeight(els) { - els.height(''); -} - - -// Given `els`, a jQuery set of cells, find the cell with the largest natural width and set the widths of all the -// cells to be that width. -// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline -function matchCellWidths(els) { - var maxInnerWidth = 0; - - els.find('> *').each(function(i, innerEl) { - var innerWidth = $(innerEl).outerWidth(); - if (innerWidth > maxInnerWidth) { - maxInnerWidth = innerWidth; - } - }); - - maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance - - els.width(maxInnerWidth); - - return maxInnerWidth; -} - - -// Turns a container element into a scroller if its contents is taller than the allotted height. -// Returns true if the element is now a scroller, false otherwise. -// NOTE: this method is best because it takes weird zooming dimensions into account -function setPotentialScroller(containerEl, height) { - containerEl.height(height).addClass('fc-scroller'); - - // are scrollbars needed? - if (containerEl[0].scrollHeight - 1 > containerEl[0].clientHeight) { // !!! -1 because IE is often off-by-one :( - return true; - } - - unsetScroller(containerEl); // undo - return false; -} - - -// Takes an element that might have been a scroller, and turns it back into a normal element. -function unsetScroller(containerEl) { - containerEl.height('').removeClass('fc-scroller'); -} - - -/* General DOM Utilities -----------------------------------------------------------------------------------------------------------------------*/ - - -// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51 -function getScrollParent(el) { - var position = el.css('position'), - scrollParent = el.parents().filter(function() { - var parent = $(this); - return (/(auto|scroll)/).test( - parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x') - ); - }).eq(0); - - return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent; -} - - -// Given a container element, return an object with the pixel values of the left/right scrollbars. -// Left scrollbars might occur on RTL browsers (IE maybe?) but I have not tested. -// PREREQUISITE: container element must have a single child with display:block -function getScrollbarWidths(container) { - var containerLeft = container.offset().left; - var containerRight = containerLeft + container.width(); - var inner = container.children(); - var innerLeft = inner.offset().left; - var innerRight = innerLeft + inner.outerWidth(); - - return { - left: innerLeft - containerLeft, - right: containerRight - innerRight - }; -} - - -// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac) -function isPrimaryMouseButton(ev) { - return ev.which == 1 && !ev.ctrlKey; -} - - -/* FullCalendar-specific Misc Utilities -----------------------------------------------------------------------------------------------------------------------*/ - - -// Creates a basic segment with the intersection of the two ranges. Returns undefined if no intersection. -// Expects all dates to be normalized to the same timezone beforehand. -function intersectionToSeg(subjectStart, subjectEnd, intervalStart, intervalEnd) { - var segStart, segEnd; - var isStart, isEnd; - - if (subjectEnd > intervalStart && subjectStart < intervalEnd) { // in bounds at all? - - if (subjectStart >= intervalStart) { - segStart = subjectStart.clone(); - isStart = true; - } - else { - segStart = intervalStart.clone(); - isStart = false; - } - - if (subjectEnd <= intervalEnd) { - segEnd = subjectEnd.clone(); - isEnd = true; - } - else { - segEnd = intervalEnd.clone(); - isEnd = false; - } - - return { - start: segStart, - end: segEnd, - isStart: isStart, - isEnd: isEnd - }; - } -} - - -function smartProperty(obj, name) { // get a camel-cased/namespaced property of an object - obj = obj || {}; - if (obj[name] !== undefined) { - return obj[name]; - } - var parts = name.split(/(?=[A-Z])/), - i = parts.length - 1, res; - for (; i>=0; i--) { - res = obj[parts[i].toLowerCase()]; - if (res !== undefined) { - return res; - } - } - return obj['default']; -} - - -/* Date Utilities -----------------------------------------------------------------------------------------------------------------------*/ - -var dayIDs = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ]; - - -// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time. -// Moments will have their timezones normalized. -function dayishDiff(a, b) { - return moment.duration({ - days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'), - ms: a.time() - b.time() - }); -} - - -function isNativeDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date; -} - - -// Returns a boolean about whether the given input is a time string, like "06:40:00" or "06:00" -function isTimeString(str) { - return /^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(str); -} - - -/* General Utilities -----------------------------------------------------------------------------------------------------------------------*/ - -fc.applyAll = applyAll; // export - - -// Create an object that has the given prototype. Just like Object.create -function createObject(proto) { - var f = function() {}; - f.prototype = proto; - return new f(); -} - - -function applyAll(functions, thisObj, args) { - if ($.isFunction(functions)) { - functions = [ functions ]; - } - if (functions) { - var i; - var ret; - for (i=0; i/g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"') - .replace(/\n/g, '
    '); -} - - -function stripHtmlEntities(text) { - return text.replace(/&.*?;/g, ''); -} - - -function capitaliseFirstLetter(str) { - return str.charAt(0).toUpperCase() + str.slice(1); -} - - -function compareNumbers(a, b) { // for .sort() - return a - b; -} - - -// Returns a function, that, as long as it continues to be invoked, will not -// be triggered. The function will be called after it stops being called for -// N milliseconds. -// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714 -function debounce(func, wait) { - var timeoutId; - var args; - var context; - var timestamp; // of most recent call - var later = function() { - var last = +new Date() - timestamp; - if (last < wait && last > 0) { - timeoutId = setTimeout(later, wait - last); - } - else { - timeoutId = null; - func.apply(context, args); - if (!timeoutId) { - context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = +new Date(); - if (!timeoutId) { - timeoutId = setTimeout(later, wait); - } - }; -} - -;; - -var ambigDateOfMonthRegex = /^\s*\d{4}-\d\d$/; -var ambigTimeOrZoneRegex = - /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/; -var newMomentProto = moment.fn; // where we will attach our new methods -var oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods -var allowValueOptimization; -var setUTCValues; // function defined below -var setLocalValues; // function defined below - - -// Creating -// ------------------------------------------------------------------------------------------------- - -// Creates a new moment, similar to the vanilla moment(...) constructor, but with -// extra features (ambiguous time, enhanced formatting). When given an existing moment, -// it will function as a clone (and retain the zone of the moment). Anything else will -// result in a moment in the local zone. -fc.moment = function() { - return makeMoment(arguments); -}; - -// Sames as fc.moment, but forces the resulting moment to be in the UTC timezone. -fc.moment.utc = function() { - var mom = makeMoment(arguments, true); - - // Force it into UTC because makeMoment doesn't guarantee it - // (if given a pre-existing moment for example) - if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone - mom.utc(); - } - - return mom; -}; - -// Same as fc.moment, but when given an ISO8601 string, the timezone offset is preserved. -// ISO8601 strings with no timezone offset will become ambiguously zoned. -fc.moment.parseZone = function() { - return makeMoment(arguments, true, true); -}; - -// Builds an enhanced moment from args. When given an existing moment, it clones. When given a -// native Date, or called with no arguments (the current time), the resulting moment will be local. -// Anything else needs to be "parsed" (a string or an array), and will be affected by: -// parseAsUTC - if there is no zone information, should we parse the input in UTC? -// parseZone - if there is zone information, should we force the zone of the moment? -function makeMoment(args, parseAsUTC, parseZone) { - var input = args[0]; - var isSingleString = args.length == 1 && typeof input === 'string'; - var isAmbigTime; - var isAmbigZone; - var ambigMatch; - var mom; - - if (moment.isMoment(input)) { - mom = moment.apply(null, args); // clone it - transferAmbigs(input, mom); // the ambig flags weren't transfered with the clone - } - else if (isNativeDate(input) || input === undefined) { - mom = moment.apply(null, args); // will be local - } - else { // "parsing" is required - isAmbigTime = false; - isAmbigZone = false; - - if (isSingleString) { - if (ambigDateOfMonthRegex.test(input)) { - // accept strings like '2014-05', but convert to the first of the month - input += '-01'; - args = [ input ]; // for when we pass it on to moment's constructor - isAmbigTime = true; - isAmbigZone = true; - } - else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) { - isAmbigTime = !ambigMatch[5]; // no time part? - isAmbigZone = true; - } - } - else if ($.isArray(input)) { - // arrays have no timezone information, so assume ambiguous zone - isAmbigZone = true; - } - // otherwise, probably a string with a format - - if (parseAsUTC) { - mom = moment.utc.apply(moment, args); - } - else { - mom = moment.apply(null, args); - } - - if (isAmbigTime) { - mom._ambigTime = true; - mom._ambigZone = true; // ambiguous time always means ambiguous zone - } - else if (parseZone) { // let's record the inputted zone somehow - if (isAmbigZone) { - mom._ambigZone = true; - } - else if (isSingleString) { - mom.zone(input); // if not a valid zone, will assign UTC - } - } - } - - mom._fullCalendar = true; // flag for extended functionality - - return mom; -} - - -// A clone method that works with the flags related to our enhanced functionality. -// In the future, use moment.momentProperties -newMomentProto.clone = function() { - var mom = oldMomentProto.clone.apply(this, arguments); - - // these flags weren't transfered with the clone - transferAmbigs(this, mom); - if (this._fullCalendar) { - mom._fullCalendar = true; - } - - return mom; -}; - - -// Time-of-day -// ------------------------------------------------------------------------------------------------- - -// GETTER -// Returns a Duration with the hours/minutes/seconds/ms values of the moment. -// If the moment has an ambiguous time, a duration of 00:00 will be returned. -// -// SETTER -// You can supply a Duration, a Moment, or a Duration-like argument. -// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous. -newMomentProto.time = function(time) { - - // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar. - // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins. - if (!this._fullCalendar) { - return oldMomentProto.time.apply(this, arguments); - } - - if (time == null) { // getter - return moment.duration({ - hours: this.hours(), - minutes: this.minutes(), - seconds: this.seconds(), - milliseconds: this.milliseconds() - }); - } - else { // setter - - this._ambigTime = false; // mark that the moment now has a time - - if (!moment.isDuration(time) && !moment.isMoment(time)) { - time = moment.duration(time); - } - - // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day). - // Only for Duration times, not Moment times. - var dayHours = 0; - if (moment.isDuration(time)) { - dayHours = Math.floor(time.asDays()) * 24; - } - - // We need to set the individual fields. - // Can't use startOf('day') then add duration. In case of DST at start of day. - return this.hours(dayHours + time.hours()) - .minutes(time.minutes()) - .seconds(time.seconds()) - .milliseconds(time.milliseconds()); - } -}; - -// Converts the moment to UTC, stripping out its time-of-day and timezone offset, -// but preserving its YMD. A moment with a stripped time will display no time -// nor timezone offset when .format() is called. -newMomentProto.stripTime = function() { - var a = this.toArray(); // year,month,date,hours,minutes,seconds as an array - - this.utc(); // set the internal UTC flag (will clear the ambig flags) - setUTCValues(this, a.slice(0, 3)); // set the year/month/date. time will be zero - - // Mark the time as ambiguous. This needs to happen after the .utc() call, which calls .zone(), - // which clears all ambig flags. Same with setUTCValues with moment-timezone. - this._ambigTime = true; - this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset - - return this; // for chaining -}; - -// Returns if the moment has a non-ambiguous time (boolean) -newMomentProto.hasTime = function() { - return !this._ambigTime; -}; - - -// Timezone -// ------------------------------------------------------------------------------------------------- - -// Converts the moment to UTC, stripping out its timezone offset, but preserving its -// YMD and time-of-day. A moment with a stripped timezone offset will display no -// timezone offset when .format() is called. -newMomentProto.stripZone = function() { - var a = this.toArray(); // year,month,date,hours,minutes,seconds as an array - var wasAmbigTime = this._ambigTime; - - this.utc(); // set the internal UTC flag (will clear the ambig flags) - setUTCValues(this, a); // will set the year/month/date/hours/minutes/seconds/ms - - if (wasAmbigTime) { - // the above call to .utc()/.zone() unfortunately clears the ambig flags, so reassign - this._ambigTime = true; - } - - // Mark the zone as ambiguous. This needs to happen after the .utc() call, which calls .zone(), - // which clears all ambig flags. Same with setUTCValues with moment-timezone. - this._ambigZone = true; - - return this; // for chaining -}; - -// Returns of the moment has a non-ambiguous timezone offset (boolean) -newMomentProto.hasZone = function() { - return !this._ambigZone; -}; - -// this method implicitly marks a zone (will get called upon .utc() and .local()) -newMomentProto.zone = function(tzo) { - - if (tzo != null) { // setter - // these assignments needs to happen before the original zone method is called. - // I forget why, something to do with a browser crash. - this._ambigTime = false; - this._ambigZone = false; - } - - return oldMomentProto.zone.apply(this, arguments); -}; - -// this method implicitly marks a zone -newMomentProto.local = function() { - var a = this.toArray(); // year,month,date,hours,minutes,seconds,ms as an array - var wasAmbigZone = this._ambigZone; - - oldMomentProto.local.apply(this, arguments); // will clear ambig flags - - if (wasAmbigZone) { - // If the moment was ambiguously zoned, the date fields were stored as UTC. - // We want to preserve these, but in local time. - setLocalValues(this, a); - } - - return this; // for chaining -}; - - -// Formatting -// ------------------------------------------------------------------------------------------------- - -newMomentProto.format = function() { - if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided? - return formatDate(this, arguments[0]); // our extended formatting - } - if (this._ambigTime) { - return oldMomentFormat(this, 'YYYY-MM-DD'); - } - if (this._ambigZone) { - return oldMomentFormat(this, 'YYYY-MM-DD[T]HH:mm:ss'); - } - return oldMomentProto.format.apply(this, arguments); -}; - -newMomentProto.toISOString = function() { - if (this._ambigTime) { - return oldMomentFormat(this, 'YYYY-MM-DD'); - } - if (this._ambigZone) { - return oldMomentFormat(this, 'YYYY-MM-DD[T]HH:mm:ss'); - } - return oldMomentProto.toISOString.apply(this, arguments); -}; - - -// Querying -// ------------------------------------------------------------------------------------------------- - -// Is the moment within the specified range? `end` is exclusive. -// FYI, this method is not a standard Moment method, so always do our enhanced logic. -newMomentProto.isWithin = function(start, end) { - var a = commonlyAmbiguate([ this, start, end ]); - return a[0] >= a[1] && a[0] < a[2]; -}; - -// When isSame is called with units, timezone ambiguity is normalized before the comparison happens. -// If no units specified, the two moments must be identically the same, with matching ambig flags. -newMomentProto.isSame = function(input, units) { - var a; - - // only do custom logic if this is an enhanced moment - if (!this._fullCalendar) { - return oldMomentProto.isSame.apply(this, arguments); - } - - if (units) { - a = commonlyAmbiguate([ this, input ], true); // normalize timezones but don't erase times - return oldMomentProto.isSame.call(a[0], a[1], units); - } - else { - input = fc.moment.parseZone(input); // normalize input - return oldMomentProto.isSame.call(this, input) && - Boolean(this._ambigTime) === Boolean(input._ambigTime) && - Boolean(this._ambigZone) === Boolean(input._ambigZone); - } -}; - -// Make these query methods work with ambiguous moments -$.each([ - 'isBefore', - 'isAfter' -], function(i, methodName) { - newMomentProto[methodName] = function(input, units) { - var a; - - // only do custom logic if this is an enhanced moment - if (!this._fullCalendar) { - return oldMomentProto[methodName].apply(this, arguments); - } - - a = commonlyAmbiguate([ this, input ]); - return oldMomentProto[methodName].call(a[0], a[1], units); - }; -}); - - -// Misc Internals -// ------------------------------------------------------------------------------------------------- - -// given an array of moment-like inputs, return a parallel array w/ moments similarly ambiguated. -// for example, of one moment has ambig time, but not others, all moments will have their time stripped. -// set `preserveTime` to `true` to keep times, but only normalize zone ambiguity. -function commonlyAmbiguate(inputs, preserveTime) { - var outputs = []; - var anyAmbigTime = false; - var anyAmbigZone = false; - var i; - - for (i=0; i "MMMM D YYYY" - formatStr = localeData.longDateFormat(formatStr) || formatStr; - // BTW, this is not important for `formatDate` because it is impossible to put custom tokens - // or non-zero areas in Moment's localized format strings. - - separator = separator || ' - '; - - return formatRangeWithChunks( - date1, - date2, - getFormatStringChunks(formatStr), - separator, - isRTL - ); -} -fc.formatRange = formatRange; // expose - - -function formatRangeWithChunks(date1, date2, chunks, separator, isRTL) { - var chunkStr; // the rendering of the chunk - var leftI; - var leftStr = ''; - var rightI; - var rightStr = ''; - var middleI; - var middleStr1 = ''; - var middleStr2 = ''; - var middleStr = ''; - - // Start at the leftmost side of the formatting string and continue until you hit a token - // that is not the same between dates. - for (leftI=0; leftIleftI; rightI--) { - chunkStr = formatSimilarChunk(date1, date2, chunks[rightI]); - if (chunkStr === false) { - break; - } - rightStr = chunkStr + rightStr; - } - - // The area in the middle is different for both of the dates. - // Collect them distinctly so we can jam them together later. - for (middleI=leftI; middleI<=rightI; middleI++) { - middleStr1 += formatDateWithChunk(date1, chunks[middleI]); - middleStr2 += formatDateWithChunk(date2, chunks[middleI]); - } - - if (middleStr1 || middleStr2) { - if (isRTL) { - middleStr = middleStr2 + separator + middleStr1; - } - else { - middleStr = middleStr1 + separator + middleStr2; - } - } - - return leftStr + middleStr + rightStr; -} - - -var similarUnitMap = { - Y: 'year', - M: 'month', - D: 'day', // day of month - d: 'day', // day of week - // prevents a separator between anything time-related... - A: 'second', // AM/PM - a: 'second', // am/pm - T: 'second', // A/P - t: 'second', // a/p - H: 'second', // hour (24) - h: 'second', // hour (12) - m: 'second', // minute - s: 'second' // second -}; -// TODO: week maybe? - - -// Given a formatting chunk, and given that both dates are similar in the regard the -// formatting chunk is concerned, format date1 against `chunk`. Otherwise, return `false`. -function formatSimilarChunk(date1, date2, chunk) { - var token; - var unit; - - if (typeof chunk === 'string') { // a literal string - return chunk; - } - else if ((token = chunk.token)) { - unit = similarUnitMap[token.charAt(0)]; - // are the dates the same for this unit of measurement? - if (unit && date1.isSame(date2, unit)) { - return oldMomentFormat(date1, token); // would be the same if we used `date2` - // BTW, don't support custom tokens - } - } - - return false; // the chunk is NOT the same for the two dates - // BTW, don't support splitting on non-zero areas -} - - -// Chunking Utils -// ------------------------------------------------------------------------------------------------- - - -var formatStringChunkCache = {}; - - -function getFormatStringChunks(formatStr) { - if (formatStr in formatStringChunkCache) { - return formatStringChunkCache[formatStr]; - } - return (formatStringChunkCache[formatStr] = chunkFormatString(formatStr)); -} - - -// Break the formatting string into an array of chunks -function chunkFormatString(formatStr) { - var chunks = []; - var chunker = /\[([^\]]*)\]|\(([^\)]*)\)|(LT|(\w)\4*o?)|([^\w\[\(]+)/g; // TODO: more descrimination - var match; - - while ((match = chunker.exec(formatStr))) { - if (match[1]) { // a literal string inside [ ... ] - chunks.push(match[1]); - } - else if (match[2]) { // non-zero formatting inside ( ... ) - chunks.push({ maybe: chunkFormatString(match[2]) }); - } - else if (match[3]) { // a formatting token - chunks.push({ token: match[3] }); - } - else if (match[5]) { // an unenclosed literal string - chunks.push(match[5]); - } - } - - return chunks; -} - -;; - -/* A rectangular panel that is absolutely positioned over other content ------------------------------------------------------------------------------------------------------------------------- -Options: - - className (string) - - content (HTML string or jQuery element set) - - parentEl - - top - - left - - right (the x coord of where the right edge should be. not a "CSS" right) - - autoHide (boolean) - - show (callback) - - hide (callback) -*/ - -function Popover(options) { - this.options = options || {}; -} - - -Popover.prototype = { - - isHidden: true, - options: null, - el: null, // the container element for the popover. generated by this object - documentMousedownProxy: null, // document mousedown handler bound to `this` - margin: 10, // the space required between the popover and the edges of the scroll container - - - // Shows the popover on the specified position. Renders it if not already - show: function() { - if (this.isHidden) { - if (!this.el) { - this.render(); - } - this.el.show(); - this.position(); - this.isHidden = false; - this.trigger('show'); - } - }, - - - // Hides the popover, through CSS, but does not remove it from the DOM - hide: function() { - if (!this.isHidden) { - this.el.hide(); - this.isHidden = true; - this.trigger('hide'); - } - }, - - - // Creates `this.el` and renders content inside of it - render: function() { - var _this = this; - var options = this.options; - - this.el = $('
    ') - .addClass(options.className || '') - .css({ - // position initially to the top left to avoid creating scrollbars - top: 0, - left: 0 - }) - .append(options.content) - .appendTo(options.parentEl); - - // when a click happens on anything inside with a 'fc-close' className, hide the popover - this.el.on('click', '.fc-close', function() { - _this.hide(); - }); - - if (options.autoHide) { - $(document).on('mousedown', this.documentMousedownProxy = $.proxy(this, 'documentMousedown')); - } - }, - - - // Triggered when the user clicks *anywhere* in the document, for the autoHide feature - documentMousedown: function(ev) { - // only hide the popover if the click happened outside the popover - if (this.el && !$(ev.target).closest(this.el).length) { - this.hide(); - } - }, - - - // Hides and unregisters any handlers - destroy: function() { - this.hide(); - - if (this.el) { - this.el.remove(); - this.el = null; - } - - $(document).off('mousedown', this.documentMousedownProxy); - }, - - - // Positions the popover optimally, using the top/left/right options - position: function() { - var options = this.options; - var origin = this.el.offsetParent().offset(); - var width = this.el.outerWidth(); - var height = this.el.outerHeight(); - var windowEl = $(window); - var viewportEl = getScrollParent(this.el); - var viewportTop; - var viewportLeft; - var viewportOffset; - var top; // the "position" (not "offset") values for the popover - var left; // - - // compute top and left - top = options.top || 0; - if (options.left !== undefined) { - left = options.left; - } - else if (options.right !== undefined) { - left = options.right - width; // derive the left value from the right value - } - else { - left = 0; - } - - if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result - viewportEl = windowEl; - viewportTop = 0; // the window is always at the top left - viewportLeft = 0; // (and .offset() won't work if called here) - } - else { - viewportOffset = viewportEl.offset(); - viewportTop = viewportOffset.top; - viewportLeft = viewportOffset.left; - } - - // if the window is scrolled, it causes the visible area to be further down - viewportTop += windowEl.scrollTop(); - viewportLeft += windowEl.scrollLeft(); - - // constrain to the view port. if constrained by two edges, give precedence to top/left - if (options.viewportConstrain !== false) { - top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin); - top = Math.max(top, viewportTop + this.margin); - left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin); - left = Math.max(left, viewportLeft + this.margin); - } - - this.el.css({ - top: top - origin.top, - left: left - origin.left - }); - }, - - - // Triggers a callback. Calls a function in the option hash of the same name. - // Arguments beyond the first `name` are forwarded on. - // TODO: better code reuse for this. Repeat code - trigger: function(name) { - if (this.options[name]) { - this.options[name].apply(this, Array.prototype.slice.call(arguments, 1)); - } - } - -}; - -;; - -/* A "coordinate map" converts pixel coordinates into an associated cell, which has an associated date ------------------------------------------------------------------------------------------------------------------------- -Common interface: - - CoordMap.prototype = { - build: function() {}, - getCell: function(x, y) {} - }; - -*/ - -/* Coordinate map for a grid component -----------------------------------------------------------------------------------------------------------------------*/ - -function GridCoordMap(grid) { - this.grid = grid; -} - - -GridCoordMap.prototype = { - - grid: null, // reference to the Grid - rows: null, // the top-to-bottom y coordinates. including the bottom of the last item - cols: null, // the left-to-right x coordinates. including the right of the last item - - containerEl: null, // container element that all coordinates are constrained to. optionally assigned - minX: null, - maxX: null, // exclusive - minY: null, - maxY: null, // exclusive - - - // Queries the grid for the coordinates of all the cells - build: function() { - this.grid.buildCoords( - this.rows = [], - this.cols = [] - ); - this.computeBounds(); - }, - - - // Given a coordinate of the document, gets the associated cell. If no cell is underneath, returns null - getCell: function(x, y) { - var cell = null; - var rows = this.rows; - var cols = this.cols; - var r = -1; - var c = -1; - var i; - - if (this.inBounds(x, y)) { - - for (i = 0; i < rows.length; i++) { - if (y >= rows[i][0] && y < rows[i][1]) { - r = i; - break; - } - } - - for (i = 0; i < cols.length; i++) { - if (x >= cols[i][0] && x < cols[i][1]) { - c = i; - break; - } - } - - if (r >= 0 && c >= 0) { - cell = { row: r, col: c }; - cell.grid = this.grid; - cell.date = this.grid.getCellDate(cell); - } - } - - return cell; - }, - - - // If there is a containerEl, compute the bounds into min/max values - computeBounds: function() { - var containerOffset; - - if (this.containerEl) { - containerOffset = this.containerEl.offset(); - this.minX = containerOffset.left; - this.maxX = containerOffset.left + this.containerEl.outerWidth(); - this.minY = containerOffset.top; - this.maxY = containerOffset.top + this.containerEl.outerHeight(); - } - }, - - - // Determines if the given coordinates are in bounds. If no `containerEl`, always true - inBounds: function(x, y) { - if (this.containerEl) { - return x >= this.minX && x < this.maxX && y >= this.minY && y < this.maxY; - } - return true; - } - -}; - - -/* Coordinate map that is a combination of multiple other coordinate maps -----------------------------------------------------------------------------------------------------------------------*/ - -function ComboCoordMap(coordMaps) { - this.coordMaps = coordMaps; -} - - -ComboCoordMap.prototype = { - - coordMaps: null, // an array of CoordMaps - - - // Builds all coordMaps - build: function() { - var coordMaps = this.coordMaps; - var i; - - for (i = 0; i < coordMaps.length; i++) { - coordMaps[i].build(); - } - }, - - - // Queries all coordMaps for the cell underneath the given coordinates, returning the first result - getCell: function(x, y) { - var coordMaps = this.coordMaps; - var cell = null; - var i; - - for (i = 0; i < coordMaps.length && !cell; i++) { - cell = coordMaps[i].getCell(x, y); - } - - return cell; - } - -}; - -;; - -/* Tracks mouse movements over a CoordMap and raises events about which cell the mouse is over. -----------------------------------------------------------------------------------------------------------------------*/ -// TODO: very useful to have a handler that gets called upon cellOut OR when dragging stops (for cleanup) - -function DragListener(coordMap, options) { - this.coordMap = coordMap; - this.options = options || {}; -} - - -DragListener.prototype = { - - coordMap: null, - options: null, - - isListening: false, - isDragging: false, - - // the cell/date the mouse was over when listening started - origCell: null, - origDate: null, - - // the cell/date the mouse is over - cell: null, - date: null, - - // coordinates of the initial mousedown - mouseX0: null, - mouseY0: null, - - // handler attached to the document, bound to the DragListener's `this` - mousemoveProxy: null, - mouseupProxy: null, - - scrollEl: null, - scrollBounds: null, // { top, bottom, left, right } - scrollTopVel: null, // pixels per second - scrollLeftVel: null, // pixels per second - scrollIntervalId: null, // ID of setTimeout for scrolling animation loop - scrollHandlerProxy: null, // this-scoped function for handling when scrollEl is scrolled - - scrollSensitivity: 30, // pixels from edge for scrolling to start - scrollSpeed: 200, // pixels per second, at maximum speed - scrollIntervalMs: 50, // millisecond wait between scroll increment - - - // Call this when the user does a mousedown. Will probably lead to startListening - mousedown: function(ev) { - if (isPrimaryMouseButton(ev)) { - - ev.preventDefault(); // prevents native selection in most browsers - - this.startListening(ev); - - // start the drag immediately if there is no minimum distance for a drag start - if (!this.options.distance) { - this.startDrag(ev); - } - } - }, - - - // Call this to start tracking mouse movements - startListening: function(ev) { - var scrollParent; - var cell; - - if (!this.isListening) { - - // grab scroll container and attach handler - if (ev && this.options.scroll) { - scrollParent = getScrollParent($(ev.target)); - if (!scrollParent.is(window) && !scrollParent.is(document)) { - this.scrollEl = scrollParent; - - // scope to `this`, and use `debounce` to make sure rapid calls don't happen - this.scrollHandlerProxy = debounce($.proxy(this, 'scrollHandler'), 100); - this.scrollEl.on('scroll', this.scrollHandlerProxy); - } - } - - this.computeCoords(); // relies on `scrollEl` - - // get info on the initial cell, date, and coordinates - if (ev) { - cell = this.getCell(ev); - this.origCell = cell; - this.origDate = cell ? cell.date : null; - - this.mouseX0 = ev.pageX; - this.mouseY0 = ev.pageY; - } - - $(document) - .on('mousemove', this.mousemoveProxy = $.proxy(this, 'mousemove')) - .on('mouseup', this.mouseupProxy = $.proxy(this, 'mouseup')) - .on('selectstart', this.preventDefault); // prevents native selection in IE<=8 - - this.isListening = true; - this.trigger('listenStart', ev); - } - }, - - - // Recomputes the drag-critical positions of elements - computeCoords: function() { - this.coordMap.build(); - this.computeScrollBounds(); - }, - - - // Called when the user moves the mouse - mousemove: function(ev) { - var minDistance; - var distanceSq; // current distance from mouseX0/mouseY0, squared - - if (!this.isDragging) { // if not already dragging... - // then start the drag if the minimum distance criteria is met - minDistance = this.options.distance || 1; - distanceSq = Math.pow(ev.pageX - this.mouseX0, 2) + Math.pow(ev.pageY - this.mouseY0, 2); - if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem - this.startDrag(ev); - } - } - - if (this.isDragging) { - this.drag(ev); // report a drag, even if this mousemove initiated the drag - } - }, - - - // Call this to initiate a legitimate drag. - // This function is called internally from this class, but can also be called explicitly from outside - startDrag: function(ev) { - var cell; - - if (!this.isListening) { // startDrag must have manually initiated - this.startListening(); - } - - if (!this.isDragging) { - this.isDragging = true; - this.trigger('dragStart', ev); - - // report the initial cell the mouse is over - cell = this.getCell(ev); - if (cell) { - this.cellOver(cell, true); - } - } - }, - - - // Called while the mouse is being moved and when we know a legitimate drag is taking place - drag: function(ev) { - var cell; - - if (this.isDragging) { - cell = this.getCell(ev); - - if (!isCellsEqual(cell, this.cell)) { // a different cell than before? - if (this.cell) { - this.cellOut(); - } - if (cell) { - this.cellOver(cell); - } - } - - this.dragScroll(ev); // will possibly cause scrolling - } - }, - - - // Called when a the mouse has just moved over a new cell - cellOver: function(cell) { - this.cell = cell; - this.date = cell.date; - this.trigger('cellOver', cell, cell.date); - }, - - - // Called when the mouse has just moved out of a cell - cellOut: function() { - if (this.cell) { - this.trigger('cellOut', this.cell); - this.cell = null; - this.date = null; - } - }, - - - // Called when the user does a mouseup - mouseup: function(ev) { - this.stopDrag(ev); - this.stopListening(ev); - }, - - - // Called when the drag is over. Will not cause listening to stop however. - // A concluding 'cellOut' event will NOT be triggered. - stopDrag: function(ev) { - if (this.isDragging) { - this.stopScrolling(); - this.trigger('dragStop', ev); - this.isDragging = false; - } - }, - - - // Call this to stop listening to the user's mouse events - stopListening: function(ev) { - if (this.isListening) { - - // remove the scroll handler if there is a scrollEl - if (this.scrollEl) { - this.scrollEl.off('scroll', this.scrollHandlerProxy); - this.scrollHandlerProxy = null; - } - - $(document) - .off('mousemove', this.mousemoveProxy) - .off('mouseup', this.mouseupProxy) - .off('selectstart', this.preventDefault); - - this.mousemoveProxy = null; - this.mouseupProxy = null; - - this.isListening = false; - this.trigger('listenStop', ev); - - this.origCell = this.cell = null; - this.origDate = this.date = null; - } - }, - - - // Gets the cell underneath the coordinates for the given mouse event - getCell: function(ev) { - return this.coordMap.getCell(ev.pageX, ev.pageY); - }, - - - // Triggers a callback. Calls a function in the option hash of the same name. - // Arguments beyond the first `name` are forwarded on. - trigger: function(name) { - if (this.options[name]) { - this.options[name].apply(this, Array.prototype.slice.call(arguments, 1)); - } - }, - - - // Stops a given mouse event from doing it's native browser action. In our case, text selection. - preventDefault: function(ev) { - ev.preventDefault(); - }, - - - /* Scrolling - ------------------------------------------------------------------------------------------------------------------*/ - - - // Computes and stores the bounding rectangle of scrollEl - computeScrollBounds: function() { - var el = this.scrollEl; - var offset; - - if (el) { - offset = el.offset(); - this.scrollBounds = { - top: offset.top, - left: offset.left, - bottom: offset.top + el.outerHeight(), - right: offset.left + el.outerWidth() - }; - } - }, - - - // Called when the dragging is in progress and scrolling should be updated - dragScroll: function(ev) { - var sensitivity = this.scrollSensitivity; - var bounds = this.scrollBounds; - var topCloseness, bottomCloseness; - var leftCloseness, rightCloseness; - var topVel = 0; - var leftVel = 0; - - if (bounds) { // only scroll if scrollEl exists - - // compute closeness to edges. valid range is from 0.0 - 1.0 - topCloseness = (sensitivity - (ev.pageY - bounds.top)) / sensitivity; - bottomCloseness = (sensitivity - (bounds.bottom - ev.pageY)) / sensitivity; - leftCloseness = (sensitivity - (ev.pageX - bounds.left)) / sensitivity; - rightCloseness = (sensitivity - (bounds.right - ev.pageX)) / sensitivity; - - // translate vertical closeness into velocity. - // mouse must be completely in bounds for velocity to happen. - if (topCloseness >= 0 && topCloseness <= 1) { - topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up - } - else if (bottomCloseness >= 0 && bottomCloseness <= 1) { - topVel = bottomCloseness * this.scrollSpeed; - } - - // translate horizontal closeness into velocity - if (leftCloseness >= 0 && leftCloseness <= 1) { - leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left - } - else if (rightCloseness >= 0 && rightCloseness <= 1) { - leftVel = rightCloseness * this.scrollSpeed; - } - } - - this.setScrollVel(topVel, leftVel); - }, - - - // Sets the speed-of-scrolling for the scrollEl - setScrollVel: function(topVel, leftVel) { - - this.scrollTopVel = topVel; - this.scrollLeftVel = leftVel; - - this.constrainScrollVel(); // massages into realistic values - - // if there is non-zero velocity, and an animation loop hasn't already started, then START - if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) { - this.scrollIntervalId = setInterval( - $.proxy(this, 'scrollIntervalFunc'), // scope to `this` - this.scrollIntervalMs - ); - } - }, - - - // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way - constrainScrollVel: function() { - var el = this.scrollEl; - - if (this.scrollTopVel < 0) { // scrolling up? - if (el.scrollTop() <= 0) { // already scrolled all the way up? - this.scrollTopVel = 0; - } - } - else if (this.scrollTopVel > 0) { // scrolling down? - if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down? - this.scrollTopVel = 0; - } - } - - if (this.scrollLeftVel < 0) { // scrolling left? - if (el.scrollLeft() <= 0) { // already scrolled all the left? - this.scrollLeftVel = 0; - } - } - else if (this.scrollLeftVel > 0) { // scrolling right? - if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right? - this.scrollLeftVel = 0; - } - } - }, - - - // This function gets called during every iteration of the scrolling animation loop - scrollIntervalFunc: function() { - var el = this.scrollEl; - var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by - - // change the value of scrollEl's scroll - if (this.scrollTopVel) { - el.scrollTop(el.scrollTop() + this.scrollTopVel * frac); - } - if (this.scrollLeftVel) { - el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac); - } - - this.constrainScrollVel(); // since the scroll values changed, recompute the velocities - - // if scrolled all the way, which causes the vels to be zero, stop the animation loop - if (!this.scrollTopVel && !this.scrollLeftVel) { - this.stopScrolling(); - } - }, - - - // Kills any existing scrolling animation loop - stopScrolling: function() { - if (this.scrollIntervalId) { - clearInterval(this.scrollIntervalId); - this.scrollIntervalId = null; - - // when all done with scrolling, recompute positions since they probably changed - this.computeCoords(); - } - }, - - - // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce) - scrollHandler: function() { - // recompute all coordinates, but *only* if this is *not* part of our scrolling animation - if (!this.scrollIntervalId) { - this.computeCoords(); - } - } - -}; - - -// Returns `true` if the cells are identically equal. `false` otherwise. -// They must have the same row, col, and be from the same grid. -// Two null values will be considered equal, as two "out of the grid" states are the same. -function isCellsEqual(cell1, cell2) { - - if (!cell1 && !cell2) { - return true; - } - - if (cell1 && cell2) { - return cell1.grid === cell2.grid && - cell1.row === cell2.row && - cell1.col === cell2.col; - } - - return false; -} - -;; - -/* Creates a clone of an element and lets it track the mouse as it moves -----------------------------------------------------------------------------------------------------------------------*/ - -function MouseFollower(sourceEl, options) { - this.options = options = options || {}; - this.sourceEl = sourceEl; - this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent -} - - -MouseFollower.prototype = { - - options: null, - - sourceEl: null, // the element that will be cloned and made to look like it is dragging - el: null, // the clone of `sourceEl` that will track the mouse - parentEl: null, // the element that `el` (the clone) will be attached to - - // the initial position of el, relative to the offset parent. made to match the initial offset of sourceEl - top0: null, - left0: null, - - // the initial position of the mouse - mouseY0: null, - mouseX0: null, - - // the number of pixels the mouse has moved from its initial position - topDelta: null, - leftDelta: null, - - mousemoveProxy: null, // document mousemove handler, bound to the MouseFollower's `this` - - isFollowing: false, - isHidden: false, - isAnimating: false, // doing the revert animation? - - - // Causes the element to start following the mouse - start: function(ev) { - if (!this.isFollowing) { - this.isFollowing = true; - - this.mouseY0 = ev.pageY; - this.mouseX0 = ev.pageX; - this.topDelta = 0; - this.leftDelta = 0; - - if (!this.isHidden) { - this.updatePosition(); - } - - $(document).on('mousemove', this.mousemoveProxy = $.proxy(this, 'mousemove')); - } - }, - - - // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position. - // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately. - stop: function(shouldRevert, callback) { - var _this = this; - var revertDuration = this.options.revertDuration; - - function complete() { - this.isAnimating = false; - _this.destroyEl(); - - this.top0 = this.left0 = null; // reset state for future updatePosition calls - - if (callback) { - callback(); - } - } - - if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time - this.isFollowing = false; - - $(document).off('mousemove', this.mousemoveProxy); - - if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation? - this.isAnimating = true; - this.el.animate({ - top: this.top0, - left: this.left0 - }, { - duration: revertDuration, - complete: complete - }); - } - else { - complete(); - } - } - }, - - - // Gets the tracking element. Create it if necessary - getEl: function() { - var el = this.el; - - if (!el) { - this.sourceEl.width(); // hack to force IE8 to compute correct bounding box - el = this.el = this.sourceEl.clone() - .css({ - position: 'absolute', - visibility: '', // in case original element was hidden (commonly through hideEvents()) - display: this.isHidden ? 'none' : '', // for when initially hidden - margin: 0, - right: 'auto', // erase and set width instead - bottom: 'auto', // erase and set height instead - width: this.sourceEl.width(), // explicit height in case there was a 'right' value - height: this.sourceEl.height(), // explicit width in case there was a 'bottom' value - opacity: this.options.opacity || '', - zIndex: this.options.zIndex - }) - .appendTo(this.parentEl); - } - - return el; - }, - - - // Removes the tracking element if it has already been created - destroyEl: function() { - if (this.el) { - this.el.remove(); - this.el = null; - } - }, - - - // Update the CSS position of the tracking element - updatePosition: function() { - var sourceOffset; - var origin; - - this.getEl(); // ensure this.el - - // make sure origin info was computed - if (this.top0 === null) { - this.sourceEl.width(); // hack to force IE8 to compute correct bounding box - sourceOffset = this.sourceEl.offset(); - origin = this.el.offsetParent().offset(); - this.top0 = sourceOffset.top - origin.top; - this.left0 = sourceOffset.left - origin.left; - } - - this.el.css({ - top: this.top0 + this.topDelta, - left: this.left0 + this.leftDelta - }); - }, - - - // Gets called when the user moves the mouse - mousemove: function(ev) { - this.topDelta = ev.pageY - this.mouseY0; - this.leftDelta = ev.pageX - this.mouseX0; - - if (!this.isHidden) { - this.updatePosition(); - } - }, - - - // Temporarily makes the tracking element invisible. Can be called before following starts - hide: function() { - if (!this.isHidden) { - this.isHidden = true; - if (this.el) { - this.el.hide(); - } - } - }, - - - // Show the tracking element after it has been temporarily hidden - show: function() { - if (this.isHidden) { - this.isHidden = false; - this.updatePosition(); - this.getEl().show(); - } - } - -}; - -;; - -/* A utility class for rendering rows. -----------------------------------------------------------------------------------------------------------------------*/ -// It leverages methods of the subclass and the View to determine custom rendering behavior for each row "type" -// (such as highlight rows, day rows, helper rows, etc). - -function RowRenderer(view) { - this.view = view; -} - - -RowRenderer.prototype = { - - view: null, // a View object - cellHtml: '', // plain default HTML used for a cell when no other is available - - - // Renders the HTML for a row, leveraging custom cell-HTML-renderers based on the `rowType`. - // Also applies the "intro" and "outro" cells, which are specified by the subclass and views. - // `row` is an optional row number. - rowHtml: function(rowType, row) { - var view = this.view; - var renderCell = this.getHtmlRenderer('cell', rowType); - var cellHtml = ''; - var col; - var date; - - row = row || 0; - - for (col = 0; col < view.colCnt; col++) { - date = view.cellToDate(row, col); - cellHtml += renderCell(row, col, date); - } - - cellHtml = this.bookendCells(cellHtml, rowType, row); // apply intro and outro - - return '' + cellHtml + ''; - }, - - - // Applies the "intro" and "outro" HTML to the given cells. - // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro. - // `cells` can be an HTML string of 's or a jQuery element - // `row` is an optional row number. - bookendCells: function(cells, rowType, row) { - var view = this.view; - var intro = this.getHtmlRenderer('intro', rowType)(row || 0); - var outro = this.getHtmlRenderer('outro', rowType)(row || 0); - var isRTL = view.opt('isRTL'); - var prependHtml = isRTL ? outro : intro; - var appendHtml = isRTL ? intro : outro; - - if (typeof cells === 'string') { - return prependHtml + cells + appendHtml; - } - else { // a jQuery element - return cells.prepend(prependHtml).append(appendHtml); - } - }, - - - // Returns an HTML-rendering function given a specific `rendererName` (like cell, intro, or outro) and a specific - // `rowType` (like day, eventSkeleton, helperSkeleton), which is optional. - // If a renderer for the specific rowType doesn't exist, it will fall back to a generic renderer. - // We will query the View object first for any custom rendering functions, then the methods of the subclass. - getHtmlRenderer: function(rendererName, rowType) { - var view = this.view; - var generalName; // like "cellHtml" - var specificName; // like "dayCellHtml". based on rowType - var provider; // either the View or the RowRenderer subclass, whichever provided the method - var renderer; - - generalName = rendererName + 'Html'; - if (rowType) { - specificName = rowType + capitaliseFirstLetter(rendererName) + 'Html'; - } - - if (specificName && (renderer = view[specificName])) { - provider = view; - } - else if (specificName && (renderer = this[specificName])) { - provider = this; - } - else if ((renderer = view[generalName])) { - provider = view; - } - else if ((renderer = this[generalName])) { - provider = this; - } - - if (typeof renderer === 'function') { - return function() { - return renderer.apply(provider, arguments) || ''; // use correct `this` and always return a string - }; - } - - // the rendered can be a plain string as well. if not specified, always an empty string. - return function() { - return renderer || ''; - }; - } - -}; - -;; - -/* An abstract class comprised of a "grid" of cells that each represent a specific datetime -----------------------------------------------------------------------------------------------------------------------*/ - -function Grid(view) { - RowRenderer.call(this, view); // call the super-constructor - this.coordMap = new GridCoordMap(this); - this.elsByFill = {}; -} - - -Grid.prototype = createObject(RowRenderer.prototype); // declare the super-class -$.extend(Grid.prototype, { - - el: null, // the containing element - coordMap: null, // a GridCoordMap that converts pixel values to datetimes - cellDuration: null, // a cell's duration. subclasses must assign this ASAP - elsByFill: null, // a hash of jQuery element sets used for rendering each fill. Keyed by fill name. - - - // Renders the grid into the `el` element. - // Subclasses should override and call this super-method when done. - render: function() { - this.bindHandlers(); - }, - - - // Called when the grid's resources need to be cleaned up - destroy: function() { - // subclasses can implement - }, - - - /* Coordinates & Cells - ------------------------------------------------------------------------------------------------------------------*/ - - - // Populates the given empty arrays with the y and x coordinates of the cells - buildCoords: function(rows, cols) { - // subclasses must implement - }, - - - // Given a cell object, returns the date for that cell - getCellDate: function(cell) { - // subclasses must implement - }, - - - // Given a cell object, returns the element that represents the cell's whole-day - getCellDayEl: function(cell) { - // subclasses must implement - }, - - - // Converts a range with an inclusive `start` and an exclusive `end` into an array of segment objects - rangeToSegs: function(start, end) { - // subclasses must implement - }, - - - /* Handlers - ------------------------------------------------------------------------------------------------------------------*/ - - - // Attach handlers to `this.el`, using bubbling to listen to all ancestors. - // We don't need to undo any of this in a "destroy" method, because the view will simply remove `this.el` from the - // DOM and jQuery will be smart enough to garbage collect the handlers. - bindHandlers: function() { - var _this = this; - - this.el.on('mousedown', function(ev) { - if ( - !$(ev.target).is('.fc-event-container *, .fc-more') && // not an an event element, or "more.." link - !$(ev.target).closest('.fc-popover').length // not on a popover (like the "more.." events one) - ) { - _this.dayMousedown(ev); - } - }); - - this.bindSegHandlers(); // attach event-element-related handlers. in Grid.events.js - }, - - - // Process a mousedown on an element that represents a day. For day clicking and selecting. - dayMousedown: function(ev) { - var _this = this; - var view = this.view; - var calendar = view.calendar; - var isSelectable = view.opt('selectable'); - var dates = null; // the inclusive dates of the selection. will be null if no selection - var start; // the inclusive start of the selection - var end; // the *exclusive* end of the selection - var dayEl; - - // this listener tracks a mousedown on a day element, and a subsequent drag. - // if the drag ends on the same day, it is a 'dayClick'. - // if 'selectable' is enabled, this listener also detects selections. - var dragListener = new DragListener(this.coordMap, { - //distance: 5, // needs more work if we want dayClick to fire correctly - scroll: view.opt('dragScroll'), - dragStart: function() { - view.unselect(); // since we could be rendering a new selection, we want to clear any old one - }, - cellOver: function(cell, date) { - if (dragListener.origDate) { // click needs to have started on a cell - - dayEl = _this.getCellDayEl(cell); - - dates = [ date, dragListener.origDate ].sort(compareNumbers); // works with Moments - start = dates[0]; - end = dates[1].clone().add(_this.cellDuration); - - if (isSelectable) { - if (calendar.isSelectionAllowedInRange(start, end)) { // allowed to select within this range? - _this.renderSelection(start, end); - } - else { - dates = null; // flag for an invalid selection - disableCursor(); - } - } - } - }, - cellOut: function(cell, date) { - dates = null; - _this.destroySelection(); - enableCursor(); - }, - listenStop: function(ev) { - if (dates) { // started and ended on a cell? - if (dates[0].isSame(dates[1])) { - view.trigger('dayClick', dayEl[0], start, ev); - } - if (isSelectable) { - // the selection will already have been rendered. just report it - view.reportSelection(start, end, ev); - } - } - enableCursor(); - } - }); - - dragListener.mousedown(ev); // start listening, which will eventually initiate a dragStart - }, - - - /* Event Dragging - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of a event being dragged over the given date(s). - // `end` can be null, as well as `seg`. See View's documentation on renderDrag for more info. - // A returned value of `true` signals that a mock "helper" event has been rendered. - renderDrag: function(start, end, seg) { - // subclasses must implement - }, - - - // Unrenders a visual indication of an event being dragged - destroyDrag: function() { - // subclasses must implement - }, - - - /* Event Resizing - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event being resized. - // `start` and `end` are the updated dates of the event. `seg` is the original segment object involved in the drag. - renderResize: function(start, end, seg) { - // subclasses must implement - }, - - - // Unrenders a visual indication of an event being resized. - destroyResize: function() { - // subclasses must implement - }, - - - /* Event Helper - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a mock event over the given date(s). - // `end` can be null, in which case the mock event that is rendered will have a null end time. - // `sourceSeg` is the internal segment object involved in the drag. If null, something external is dragging. - renderRangeHelper: function(start, end, sourceSeg) { - var view = this.view; - var fakeEvent; - - // compute the end time if forced to do so (this is what EventManager does) - if (!end && view.opt('forceEventDuration')) { - end = view.calendar.getDefaultEventEnd(!start.hasTime(), start); - } - - fakeEvent = sourceSeg ? createObject(sourceSeg.event) : {}; // mask the original event object if possible - fakeEvent.start = start; - fakeEvent.end = end; - fakeEvent.allDay = !(start.hasTime() || (end && end.hasTime())); // freshly compute allDay - - // this extra className will be useful for differentiating real events from mock events in CSS - fakeEvent.className = (fakeEvent.className || []).concat('fc-helper'); - - // if something external is being dragged in, don't render a resizer - if (!sourceSeg) { - fakeEvent.editable = false; - } - - this.renderHelper(fakeEvent, sourceSeg); // do the actual rendering - }, - - - // Renders a mock event - renderHelper: function(event, sourceSeg) { - // subclasses must implement - }, - - - // Unrenders a mock event - destroyHelper: function() { - // subclasses must implement - }, - - - /* Selection - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses. - renderSelection: function(start, end) { - this.renderHighlight(start, end); - }, - - - // Unrenders any visual indications of a selection. Will unrender a highlight by default. - destroySelection: function() { - this.destroyHighlight(); - }, - - - /* Highlight - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders an emphasis on the given date range. `start` is inclusive. `end` is exclusive. - renderHighlight: function(start, end) { - this.renderFill('highlight', this.rangeToSegs(start, end)); - }, - - - // Unrenders the emphasis on a date range - destroyHighlight: function() { - this.destroyFill('highlight'); - }, - - - // Generates an array of classNames for rendering the highlight. Used by the fill system. - highlightSegClasses: function() { - return [ 'fc-highlight' ]; - }, - - - /* Fill System (highlight, background events, business hours) - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a set of rectangles over the given segments of time. - // Returns a subset of segs, the segs that were actually rendered. - // Responsible for populating this.elsByFill - renderFill: function(type, segs) { - // subclasses must implement - }, - - - // Unrenders a specific type of fill that is currently rendered on the grid - destroyFill: function(type) { - var el = this.elsByFill[type]; - - if (el) { - el.remove(); - delete this.elsByFill[type]; - } - }, - - - // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types. - // Only returns segments that successfully rendered. - // To be harnessed by renderFill (implemented by subclasses). - // Analagous to renderFgSegEls. - renderFillSegEls: function(type, segs) { - var _this = this; - var segElMethod = this[type + 'SegEl']; - var html = ''; - var renderedSegs = []; - var i; - - if (segs.length) { - - // build a large concatenation of segment HTML - for (i = 0; i < segs.length; i++) { - html += this.fillSegHtml(type, segs[i]); - } - - // Grab individual elements from the combined HTML string. Use each as the default rendering. - // Then, compute the 'el' for each segment. - $(html).each(function(i, node) { - var seg = segs[i]; - var el = $(node); - - // allow custom filter methods per-type - if (segElMethod) { - el = segElMethod.call(_this, seg, el); - } - - if (el) { // custom filters did not cancel the render - el = $(el); // allow custom filter to return raw DOM node - - // correct element type? (would be bad if a non-TD were inserted into a table for example) - if (el.is(_this.fillSegTag)) { - seg.el = el; - renderedSegs.push(seg); - } - } - }); - } - - return renderedSegs; - }, - - - fillSegTag: 'div', // subclasses can override - - - // Builds the HTML needed for one fill segment. Generic enought o work with different types. - fillSegHtml: function(type, seg) { - var classesMethod = this[type + 'SegClasses']; // custom hooks per-type - var stylesMethod = this[type + 'SegStyles']; // - var classes = classesMethod ? classesMethod.call(this, seg) : []; - var styles = stylesMethod ? stylesMethod.call(this, seg) : ''; // a semi-colon separated CSS property string - - return '<' + this.fillSegTag + - (classes.length ? ' class="' + classes.join(' ') + '"' : '') + - (styles ? ' style="' + styles + '"' : '') + - ' />'; - }, - - - /* Generic rendering utilities for subclasses - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a day-of-week header row - headHtml: function() { - return '' + - '
    ' + - '' + - '' + - this.rowHtml('head') + // leverages RowRenderer - '' + - '
    ' + - '
    '; - }, - - - // Used by the `headHtml` method, via RowRenderer, for rendering the HTML of a day-of-week header cell - headCellHtml: function(row, col, date) { - var view = this.view; - var calendar = view.calendar; - var colFormat = view.opt('columnFormat'); - - return '' + - '' + - htmlEscape(calendar.formatDate(date, colFormat)) + - ''; - }, - - - // Renders the HTML for a single-day background cell - bgCellHtml: function(row, col, date) { - var view = this.view; - var classes = this.getDayClasses(date); - - classes.unshift('fc-day', view.widgetContentClass); - - return ''; - }, - - - // Computes HTML classNames for a single-day cell - getDayClasses: function(date) { - var view = this.view; - var today = view.calendar.getNow().stripTime(); - var classes = [ 'fc-' + dayIDs[date.day()] ]; - - if ( - view.name === 'month' && - date.month() != view.intervalStart.month() - ) { - classes.push('fc-other-month'); - } - - if (date.isSame(today, 'day')) { - classes.push( - 'fc-today', - view.highlightStateClass - ); - } - else if (date < today) { - classes.push('fc-past'); - } - else { - classes.push('fc-future'); - } - - return classes; - } - -}); - -;; - -/* Event-rendering and event-interaction methods for the abstract Grid class -----------------------------------------------------------------------------------------------------------------------*/ - -$.extend(Grid.prototype, { - - mousedOverSeg: null, // the segment object the user's mouse is over. null if over nothing - isDraggingSeg: false, // is a segment being dragged? boolean - isResizingSeg: false, // is a segment being resized? boolean - segs: null, // the event segments currently rendered in the grid - - - // Renders the given events onto the grid - renderEvents: function(events) { - var segs = this.eventsToSegs(events); - var bgSegs = []; - var fgSegs = []; - var i, seg; - - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - - if (isBgEvent(seg.event)) { - bgSegs.push(seg); - } - else { - fgSegs.push(seg); - } - } - - // Render each different type of segment. - // Each function may return a subset of the segs, segs that were actually rendered. - bgSegs = this.renderBgSegs(bgSegs) || bgSegs; - fgSegs = this.renderFgSegs(fgSegs) || fgSegs; - - this.segs = bgSegs.concat(fgSegs); - }, - - - // Unrenders all events currently rendered on the grid - destroyEvents: function() { - this.triggerSegMouseout(); // trigger an eventMouseout if user's mouse is over an event - - this.destroyFgSegs(); - this.destroyBgSegs(); - - this.segs = null; - }, - - - // Retrieves all rendered segment objects currently rendered on the grid - getSegs: function() { - return this.segs || []; - }, - - - /* Foreground Segment Rendering - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders foreground event segments onto the grid. May return a subset of segs that were rendered. - renderFgSegs: function(segs) { - // subclasses must implement - }, - - - // Unrenders all currently rendered foreground segments - destroyFgSegs: function() { - // subclasses must implement - }, - - - // Renders and assigns an `el` property for each foreground event segment. - // Only returns segments that successfully rendered. - // A utility that subclasses may use. - renderFgSegEls: function(segs, disableResizing) { - var view = this.view; - var html = ''; - var renderedSegs = []; - var i; - - if (segs.length) { // don't build an empty html string - - // build a large concatenation of event segment HTML - for (i = 0; i < segs.length; i++) { - html += this.fgSegHtml(segs[i], disableResizing); - } - - // Grab individual elements from the combined HTML string. Use each as the default rendering. - // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false. - $(html).each(function(i, node) { - var seg = segs[i]; - var el = view.resolveEventEl(seg.event, $(node)); - - if (el) { - el.data('fc-seg', seg); // used by handlers - seg.el = el; - renderedSegs.push(seg); - } - }); - } - - return renderedSegs; - }, - - - // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls() - fgSegHtml: function(seg, disableResizing) { - // subclasses should implement - }, - - - /* Background Segment Rendering - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders the given background event segments onto the grid. - // Returns a subset of the segs that were actually rendered. - renderBgSegs: function(segs) { - return this.renderFill('bgEvent', segs); - }, - - - // Unrenders all the currently rendered background event segments - destroyBgSegs: function() { - this.destroyFill('bgEvent'); - }, - - - // Renders a background event element, given the default rendering. Called by the fill system. - bgEventSegEl: function(seg, el) { - return this.view.resolveEventEl(seg.event, el); // will filter through eventRender - }, - - - // Generates an array of classNames to be used for the default rendering of a background event. - // Called by the fill system. - bgEventSegClasses: function(seg) { - var event = seg.event; - var source = event.source || {}; - - return [ 'fc-bgevent' ].concat( - event.className, - source.className || [] - ); - }, - - - // Generates a semicolon-separated CSS string to be used for the default rendering of a background event. - // Called by the fill system. - // TODO: consolidate with getEventSkinCss? - bgEventSegStyles: function(seg) { - var view = this.view; - var event = seg.event; - var source = event.source || {}; - var eventColor = event.color; - var sourceColor = source.color; - var optionColor = view.opt('eventColor'); - var backgroundColor = - event.backgroundColor || - eventColor || - source.backgroundColor || - sourceColor || - view.opt('eventBackgroundColor') || - optionColor; - - if (backgroundColor) { - return 'background-color:' + backgroundColor; - } - - return ''; - }, - - - // Generates an array of classNames to be used for the rendering business hours overlay. Called by the fill system. - businessHoursSegClasses: function(seg) { - return [ 'fc-nonbusiness', 'fc-bgevent' ]; - }, - - - /* Handlers - ------------------------------------------------------------------------------------------------------------------*/ - - - // Attaches event-element-related handlers to the container element and leverage bubbling - bindSegHandlers: function() { - var _this = this; - var view = this.view; - - $.each( - { - mouseenter: function(seg, ev) { - _this.triggerSegMouseover(seg, ev); - }, - mouseleave: function(seg, ev) { - _this.triggerSegMouseout(seg, ev); - }, - click: function(seg, ev) { - return view.trigger('eventClick', this, seg.event, ev); // can return `false` to cancel - }, - mousedown: function(seg, ev) { - if ($(ev.target).is('.fc-resizer') && view.isEventResizable(seg.event)) { - _this.segResizeMousedown(seg, ev); - } - else if (view.isEventDraggable(seg.event)) { - _this.segDragMousedown(seg, ev); - } - } - }, - function(name, func) { - // attach the handler to the container element and only listen for real event elements via bubbling - _this.el.on(name, '.fc-event-container > *', function(ev) { - var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents - - // only call the handlers if there is not a drag/resize in progress - if (seg && !_this.isDraggingSeg && !_this.isResizingSeg) { - return func.call(this, seg, ev); // `this` will be the event element - } - }); - } - ); - }, - - - // Updates internal state and triggers handlers for when an event element is moused over - triggerSegMouseover: function(seg, ev) { - if (!this.mousedOverSeg) { - this.mousedOverSeg = seg; - this.view.trigger('eventMouseover', seg.el[0], seg.event, ev); - } - }, - - - // Updates internal state and triggers handlers for when an event element is moused out. - // Can be given no arguments, in which case it will mouseout the segment that was previously moused over. - triggerSegMouseout: function(seg, ev) { - ev = ev || {}; // if given no args, make a mock mouse event - - if (this.mousedOverSeg) { - seg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment - this.mousedOverSeg = null; - this.view.trigger('eventMouseout', seg.el[0], seg.event, ev); - } - }, - - - /* Dragging - ------------------------------------------------------------------------------------------------------------------*/ - - - // Called when the user does a mousedown on an event, which might lead to dragging. - // Generic enough to work with any type of Grid. - segDragMousedown: function(seg, ev) { - var _this = this; - var view = this.view; - var calendar = view.calendar; - var el = seg.el; - var event = seg.event; - var newStart, newEnd; - - // A clone of the original element that will move with the mouse - var mouseFollower = new MouseFollower(seg.el, { - parentEl: view.el, - opacity: view.opt('dragOpacity'), - revertDuration: view.opt('dragRevertDuration'), - zIndex: 2 // one above the .fc-view - }); - - // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents - // of the view. - var dragListener = new DragListener(view.coordMap, { - distance: 5, - scroll: view.opt('dragScroll'), - listenStart: function(ev) { - mouseFollower.hide(); // don't show until we know this is a real drag - mouseFollower.start(ev); - }, - dragStart: function(ev) { - _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported - _this.isDraggingSeg = true; - view.hideEvent(event); // hide all event segments. our mouseFollower will take over - view.trigger('eventDragStart', el[0], event, ev, {}); // last argument is jqui dummy - }, - cellOver: function(cell, date) { - var origDate = seg.cellDate || dragListener.origDate; - var res = _this.computeDraggedEventDates(seg, origDate, date); - newStart = res.start; - newEnd = res.end; - - if (calendar.isEventAllowedInRange(event, newStart, res.visibleEnd)) { // allowed to drop here? - if (view.renderDrag(newStart, newEnd, seg)) { // have the view render a visual indication - mouseFollower.hide(); // if the view is already using a mock event "helper", hide our own - } - else { - mouseFollower.show(); - } - } - else { - // have the helper follow the mouse (no snapping) with a warning-style cursor - newStart = null; // mark an invalid drop date - mouseFollower.show(); - disableCursor(); - } - }, - cellOut: function() { // called before mouse moves to a different cell OR moved out of all cells - newStart = null; - view.destroyDrag(); // unrender whatever was done in view.renderDrag - mouseFollower.show(); // show in case we are moving out of all cells - enableCursor(); - }, - dragStop: function(ev) { - var hasChanged = newStart && !newStart.isSame(event.start); - - // do revert animation if hasn't changed. calls a callback when finished (whether animation or not) - mouseFollower.stop(!hasChanged, function() { - _this.isDraggingSeg = false; - view.destroyDrag(); - view.showEvent(event); - view.trigger('eventDragStop', el[0], event, ev, {}); // last argument is jqui dummy - - if (hasChanged) { - view.eventDrop(el[0], event, newStart, ev); // will rerender all events... - } - }); - - enableCursor(); - }, - listenStop: function() { - mouseFollower.stop(); // put in listenStop in case there was a mousedown but the drag never started - } - }); - - dragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart - }, - - - // Given a segment, the dates where a drag began and ended, calculates the Event Object's new start and end dates. - // Might return a `null` end (even when forceEventDuration is on). - computeDraggedEventDates: function(seg, dragStartDate, dropDate) { - var view = this.view; - var event = seg.event; - var start = event.start; - var end = view.calendar.getEventEnd(event); - var delta; - var newStart; - var newEnd; - var newAllDay; - var visibleEnd; - - if (dropDate.hasTime() === dragStartDate.hasTime()) { - delta = dayishDiff(dropDate, dragStartDate); - newStart = start.clone().add(delta); - if (event.end === null) { // do we need to compute an end? - newEnd = null; - } - else { - newEnd = end.clone().add(delta); - } - newAllDay = event.allDay; // keep it the same - } - else { - // if switching from day <-> timed, start should be reset to the dropped date, and the end cleared - newStart = dropDate; - newEnd = null; // end should be cleared - newAllDay = !dropDate.hasTime(); - } - - // compute what the end date will appear to be - visibleEnd = newEnd || view.calendar.getDefaultEventEnd(newAllDay, newStart); - - return { start: newStart, end: newEnd, visibleEnd: visibleEnd }; - }, - - - /* Resizing - ------------------------------------------------------------------------------------------------------------------*/ - - - // Called when the user does a mousedown on an event's resizer, which might lead to resizing. - // Generic enough to work with any type of Grid. - segResizeMousedown: function(seg, ev) { - var _this = this; - var view = this.view; - var calendar = view.calendar; - var el = seg.el; - var event = seg.event; - var start = event.start; - var end = view.calendar.getEventEnd(event); - var newEnd = null; - var dragListener; - - function destroy() { // resets the rendering to show the original event - _this.destroyResize(); - view.showEvent(event); - } - - // Tracks mouse movement over the *grid's* coordinate map - dragListener = new DragListener(this.coordMap, { - distance: 5, - scroll: view.opt('dragScroll'), - dragStart: function(ev) { - _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported - _this.isResizingSeg = true; - view.trigger('eventResizeStart', el[0], event, ev, {}); // last argument is jqui dummy - }, - cellOver: function(cell, date) { - // compute the new end. don't allow it to go before the event's start - if (date.isBefore(start)) { // allows comparing ambig to non-ambig - date = start; - } - newEnd = date.clone().add(_this.cellDuration); // make it an exclusive end - - if (calendar.isEventAllowedInRange(event, start, newEnd)) { // allowed to be resized here? - if (newEnd.isSame(end)) { - newEnd = null; // mark an invalid resize - destroy(); - } - else { - _this.renderResize(start, newEnd, seg); - view.hideEvent(event); - } - } - else { - newEnd = null; // mark an invalid resize - destroy(); - disableCursor(); - } - }, - cellOut: function() { // called before mouse moves to a different cell OR moved out of all cells - newEnd = null; - destroy(); - enableCursor(); - }, - dragStop: function(ev) { - _this.isResizingSeg = false; - destroy(); - enableCursor(); - view.trigger('eventResizeStop', el[0], event, ev, {}); // last argument is jqui dummy - - if (newEnd) { - view.eventResize(el[0], event, newEnd, ev); // will rerender all events... - } - } - }); - - dragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart - }, - - - /* Rendering Utils - ------------------------------------------------------------------------------------------------------------------*/ - - - // Generic utility for generating the HTML classNames for an event segment's element - getSegClasses: function(seg, isDraggable, isResizable) { - var event = seg.event; - var classes = [ - 'fc-event', - seg.isStart ? 'fc-start' : 'fc-not-start', - seg.isEnd ? 'fc-end' : 'fc-not-end' - ].concat( - event.className, - event.source ? event.source.className : [] - ); - - if (isDraggable) { - classes.push('fc-draggable'); - } - if (isResizable) { - classes.push('fc-resizable'); - } - - return classes; - }, - - - // Utility for generating a CSS string with all the event skin-related properties - getEventSkinCss: function(event) { - var view = this.view; - var source = event.source || {}; - var eventColor = event.color; - var sourceColor = source.color; - var optionColor = view.opt('eventColor'); - var backgroundColor = - event.backgroundColor || - eventColor || - source.backgroundColor || - sourceColor || - view.opt('eventBackgroundColor') || - optionColor; - var borderColor = - event.borderColor || - eventColor || - source.borderColor || - sourceColor || - view.opt('eventBorderColor') || - optionColor; - var textColor = - event.textColor || - source.textColor || - view.opt('eventTextColor'); - var statements = []; - if (backgroundColor) { - statements.push('background-color:' + backgroundColor); - } - if (borderColor) { - statements.push('border-color:' + borderColor); - } - if (textColor) { - statements.push('color:' + textColor); - } - return statements.join(';'); - }, - - - /* Converting events -> ranges -> segs - ------------------------------------------------------------------------------------------------------------------*/ - - - // Converts an array of event objects into an array of event segment objects. - // A custom `rangeToSegsFunc` may be given for arbitrarily slicing up events. - eventsToSegs: function(events, rangeToSegsFunc) { - var eventRanges = this.eventsToRanges(events); - var segs = []; - var i; - - for (i = 0; i < eventRanges.length; i++) { - segs.push.apply( - segs, - this.eventRangeToSegs(eventRanges[i], rangeToSegsFunc) - ); - } - - return segs; - }, - - - // Converts an array of events into an array of "range" objects. - // A "range" object is a plain object with start/end properties denoting the time it covers. Also an event property. - // For "normal" events, this will be identical to the event's start/end, but for "inverse-background" events, - // will create an array of ranges that span the time *not* covered by the given event. - eventsToRanges: function(events) { - var _this = this; - var eventsById = groupEventsById(events); - var ranges = []; - - // group by ID so that related inverse-background events can be rendered together - $.each(eventsById, function(id, eventGroup) { - if (eventGroup.length) { - ranges.push.apply( - ranges, - isInverseBgEvent(eventGroup[0]) ? - _this.eventsToInverseRanges(eventGroup) : - _this.eventsToNormalRanges(eventGroup) - ); - } - }); - - return ranges; - }, - - - // Converts an array of "normal" events (not inverted rendering) into a parallel array of ranges - eventsToNormalRanges: function(events) { - var calendar = this.view.calendar; - var ranges = []; - var i, event; - var eventStart, eventEnd; - - for (i = 0; i < events.length; i++) { - event = events[i]; - - // make copies and normalize by stripping timezone - eventStart = event.start.clone().stripZone(); - eventEnd = calendar.getEventEnd(event).stripZone(); - - ranges.push({ - event: event, - start: eventStart, - end: eventEnd, - eventStartMS: +eventStart, - eventDurationMS: eventEnd - eventStart - }); - } - - return ranges; - }, - - - // Converts an array of events, with inverse-background rendering, into an array of range objects. - // The range objects will cover all the time NOT covered by the events. - eventsToInverseRanges: function(events) { - var view = this.view; - var viewStart = view.start.clone().stripZone(); // normalize timezone - var viewEnd = view.end.clone().stripZone(); // normalize timezone - var normalRanges = this.eventsToNormalRanges(events); // will give us normalized dates we can use w/o copies - var inverseRanges = []; - var event0 = events[0]; // assign this to each range's `.event` - var start = viewStart; // the end of the previous range. the start of the new range - var i, normalRange; - - // ranges need to be in order. required for our date-walking algorithm - normalRanges.sort(compareNormalRanges); - - for (i = 0; i < normalRanges.length; i++) { - normalRange = normalRanges[i]; - - // add the span of time before the event (if there is any) - if (normalRange.start > start) { // compare millisecond time (skip any ambig logic) - inverseRanges.push({ - event: event0, - start: start, - end: normalRange.start - }); - } - - start = normalRange.end; - } - - // add the span of time after the last event (if there is any) - if (start < viewEnd) { // compare millisecond time (skip any ambig logic) - inverseRanges.push({ - event: event0, - start: start, - end: viewEnd - }); - } - - return inverseRanges; - }, - - - // Slices the given event range into one or more segment objects. - // A `rangeToSegsFunc` custom slicing function can be given. - eventRangeToSegs: function(eventRange, rangeToSegsFunc) { - var segs; - var i, seg; - - if (rangeToSegsFunc) { - segs = rangeToSegsFunc(eventRange.start, eventRange.end); - } - else { - segs = this.rangeToSegs(eventRange.start, eventRange.end); // defined by the subclass - } - - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - seg.event = eventRange.event; - seg.eventStartMS = eventRange.eventStartMS; - seg.eventDurationMS = eventRange.eventDurationMS; - } - - return segs; - } - -}); - - -/* Utilities -----------------------------------------------------------------------------------------------------------------------*/ - - -function isBgEvent(event) { // returns true if background OR inverse-background - var rendering = getEventRendering(event); - return rendering === 'background' || rendering === 'inverse-background'; -} - - -function isInverseBgEvent(event) { - return getEventRendering(event) === 'inverse-background'; -} - - -function getEventRendering(event) { - return firstDefined((event.source || {}).rendering, event.rendering); -} - - -function groupEventsById(events) { - var eventsById = {}; - var i, event; - - for (i = 0; i < events.length; i++) { - event = events[i]; - (eventsById[event._id] || (eventsById[event._id] = [])).push(event); - } - - return eventsById; -} - - -// A cmp function for determining which non-inverted "ranges" (see above) happen earlier -function compareNormalRanges(range1, range2) { - return range1.eventStartMS - range2.eventStartMS; // earlier ranges go first -} - - -// A cmp function for determining which segments should take visual priority -// DOES NOT WORK ON INVERTED BACKGROUND EVENTS because they have no eventStartMS/eventDurationMS -function compareSegs(seg1, seg2) { - return seg1.eventStartMS - seg2.eventStartMS || // earlier events go first - seg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first - seg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1) - (seg1.event.title || '').localeCompare(seg2.event.title); // tie? alphabetically by title -} - - -;; - -/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week. -----------------------------------------------------------------------------------------------------------------------*/ - -function DayGrid(view) { - Grid.call(this, view); // call the super-constructor -} - - -DayGrid.prototype = createObject(Grid.prototype); // declare the super-class -$.extend(DayGrid.prototype, { - - numbersVisible: false, // should render a row for day/week numbers? manually set by the view - cellDuration: moment.duration({ days: 1 }), // required for Grid.event.js. Each cell is always a single day - bottomCoordPadding: 0, // hack for extending the hit area for the last row of the coordinate grid - - rowEls: null, // set of fake row elements - dayEls: null, // set of whole-day elements comprising the row's background - helperEls: null, // set of cell skeleton elements for rendering the mock event "helper" - - - // Renders the rows and columns into the component's `this.el`, which should already be assigned. - // isRigid determins whether the individual rows should ignore the contents and be a constant height. - // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient. - render: function(isRigid) { - var view = this.view; - var html = ''; - var row; - - for (row = 0; row < view.rowCnt; row++) { - html += this.dayRowHtml(row, isRigid); - } - this.el.html(html); - - this.rowEls = this.el.find('.fc-row'); - this.dayEls = this.el.find('.fc-day'); - - // run all the day cells through the dayRender callback - this.dayEls.each(function(i, node) { - var date = view.cellToDate(Math.floor(i / view.colCnt), i % view.colCnt); - view.trigger('dayRender', null, date, $(node)); - }); - - Grid.prototype.render.call(this); // call the super-method - }, - - - destroy: function() { - this.destroySegPopover(); - }, - - - // Generates the HTML for a single row. `row` is the row number. - dayRowHtml: function(row, isRigid) { - var view = this.view; - var classes = [ 'fc-row', 'fc-week', view.widgetContentClass ]; - - if (isRigid) { - classes.push('fc-rigid'); - } - - return '' + - '
    ' + - '
    ' + - '' + - this.rowHtml('day', row) + // leverages RowRenderer. calls dayCellHtml() - '
    ' + - '
    ' + - '
    ' + - '' + - (this.numbersVisible ? - '' + - this.rowHtml('number', row) + // leverages RowRenderer. View will define render method - '' : - '' - ) + - '
    ' + - '
    ' + - '
    '; - }, - - - // Renders the HTML for a whole-day cell. Will eventually end up in the day-row's background. - // We go through a 'day' row type instead of just doing a 'bg' row type so that the View can do custom rendering - // specifically for whole-day rows, whereas a 'bg' might also be used for other purposes (TimeGrid bg for example). - dayCellHtml: function(row, col, date) { - return this.bgCellHtml(row, col, date); - }, - - - /* Coordinates & Cells - ------------------------------------------------------------------------------------------------------------------*/ - - - // Populates the empty `rows` and `cols` arrays with coordinates of the cells. For CoordGrid. - buildCoords: function(rows, cols) { - var colCnt = this.view.colCnt; - var e, n, p; - - this.dayEls.slice(0, colCnt).each(function(i, _e) { // iterate the first row of day elements - e = $(_e); - n = e.offset().left; - if (i) { - p[1] = n; - } - p = [ n ]; - cols[i] = p; - }); - p[1] = n + e.outerWidth(); - - this.rowEls.each(function(i, _e) { - e = $(_e); - n = e.offset().top; - if (i) { - p[1] = n; - } - p = [ n ]; - rows[i] = p; - }); - p[1] = n + e.outerHeight() + this.bottomCoordPadding; // hack to extend hit area of last row - }, - - - // Converts a cell to a date - getCellDate: function(cell) { - return this.view.cellToDate(cell); // leverages the View's cell system - }, - - - // Gets the whole-day element associated with the cell - getCellDayEl: function(cell) { - return this.dayEls.eq(cell.row * this.view.colCnt + cell.col); - }, - - - // Converts a range with an inclusive `start` and an exclusive `end` into an array of segment objects - rangeToSegs: function(start, end) { - return this.view.rangeToSegments(start, end); // leverages the View's cell system - }, - - - /* Event Drag Visualization - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event hovering over the given date(s). - // `end` can be null, as well as `seg`. See View's documentation on renderDrag for more info. - // A returned value of `true` signals that a mock "helper" event has been rendered. - renderDrag: function(start, end, seg) { - var opacity; - - // always render a highlight underneath - this.renderHighlight( - start, - end || this.view.calendar.getDefaultEventEnd(true, start) - ); - - // if a segment from the same calendar but another component is being dragged, render a helper event - if (seg && !seg.el.closest(this.el).length) { - - this.renderRangeHelper(start, end, seg); - - opacity = this.view.opt('dragOpacity'); - if (opacity !== undefined) { - this.helperEls.css('opacity', opacity); - } - - return true; // a helper has been rendered - } - }, - - - // Unrenders any visual indication of a hovering event - destroyDrag: function() { - this.destroyHighlight(); - this.destroyHelper(); - }, - - - /* Event Resize Visualization - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event being resized - renderResize: function(start, end, seg) { - this.renderHighlight(start, end); - this.renderRangeHelper(start, end, seg); - }, - - - // Unrenders a visual indication of an event being resized - destroyResize: function() { - this.destroyHighlight(); - this.destroyHelper(); - }, - - - /* Event Helper - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null. - renderHelper: function(event, sourceSeg) { - var helperNodes = []; - var segs = this.eventsToSegs([ event ]); - var rowStructs; - - segs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered - rowStructs = this.renderSegRows(segs); - - // inject each new event skeleton into each associated row - this.rowEls.each(function(row, rowNode) { - var rowEl = $(rowNode); // the .fc-row - var skeletonEl = $('
    '); // will be absolutely positioned - var skeletonTop; - - // If there is an original segment, match the top position. Otherwise, put it at the row's top level - if (sourceSeg && sourceSeg.row === row) { - skeletonTop = sourceSeg.el.position().top; - } - else { - skeletonTop = rowEl.find('.fc-content-skeleton tbody').position().top; - } - - skeletonEl.css('top', skeletonTop) - .find('table') - .append(rowStructs[row].tbodyEl); - - rowEl.append(skeletonEl); - helperNodes.push(skeletonEl[0]); - }); - - this.helperEls = $(helperNodes); // array -> jQuery set - }, - - - // Unrenders any visual indication of a mock helper event - destroyHelper: function() { - if (this.helperEls) { - this.helperEls.remove(); - this.helperEls = null; - } - }, - - - /* Fill System (highlight, background events, business hours) - ------------------------------------------------------------------------------------------------------------------*/ - - - fillSegTag: 'td', // override the default tag name - - - // Renders a set of rectangles over the given segments of days. - // Only returns segments that successfully rendered. - renderFill: function(type, segs) { - var nodes = []; - var i, seg; - var skeletonEl; - - segs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs - - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - skeletonEl = this.renderFillRow(type, seg); - this.rowEls.eq(seg.row).append(skeletonEl); - nodes.push(skeletonEl[0]); - } - - this.elsByFill[type] = $(nodes); - - return segs; - }, - - - // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered. - renderFillRow: function(type, seg) { - var colCnt = this.view.colCnt; - var startCol = seg.leftCol; - var endCol = seg.rightCol + 1; - var skeletonEl; - var trEl; - - skeletonEl = $( - '
    ' + - '
    ' + - '
    ' - ); - trEl = skeletonEl.find('tr'); - - if (startCol > 0) { - trEl.append(''); - } - - trEl.append( - seg.el.attr('colspan', endCol - startCol) - ); - - if (endCol < colCnt) { - trEl.append(''); - } - - this.bookendCells(trEl, type); - - return skeletonEl; - } - -}); - -;; - -/* Event-rendering methods for the DayGrid class -----------------------------------------------------------------------------------------------------------------------*/ - -$.extend(DayGrid.prototype, { - - rowStructs: null, // an array of objects, each holding information about a row's foreground event-rendering - - - // Unrenders all events currently rendered on the grid - destroyEvents: function() { - this.destroySegPopover(); // removes the "more.." events popover - Grid.prototype.destroyEvents.apply(this, arguments); // calls the super-method - }, - - - // Retrieves all rendered segment objects currently rendered on the grid - getSegs: function() { - return Grid.prototype.getSegs.call(this) // get the segments from the super-method - .concat(this.popoverSegs || []); // append the segments from the "more..." popover - }, - - - // Renders the given background event segments onto the grid - renderBgSegs: function(segs) { - - // don't render timed background events - var allDaySegs = $.grep(segs, function(seg) { - return seg.event.allDay; - }); - - return Grid.prototype.renderBgSegs.call(this, allDaySegs); // call the super-method - }, - - - // Renders the given foreground event segments onto the grid - renderFgSegs: function(segs) { - var rowStructs; - - // render an `.el` on each seg - // returns a subset of the segs. segs that were actually rendered - segs = this.renderFgSegEls(segs); - - rowStructs = this.rowStructs = this.renderSegRows(segs); - - // append to each row's content skeleton - this.rowEls.each(function(i, rowNode) { - $(rowNode).find('.fc-content-skeleton > table').append( - rowStructs[i].tbodyEl - ); - }); - - return segs; // return only the segs that were actually rendered - }, - - - // Unrenders all currently rendered foreground event segments - destroyFgSegs: function() { - var rowStructs = this.rowStructs || []; - var rowStruct; - - while ((rowStruct = rowStructs.pop())) { - rowStruct.tbodyEl.remove(); - } - - this.rowStructs = null; - }, - - - // Uses the given events array to generate elements that should be appended to each row's content skeleton. - // Returns an array of rowStruct objects (see the bottom of `renderSegRow`). - // PRECONDITION: each segment shoud already have a rendered and assigned `.el` - renderSegRows: function(segs) { - var rowStructs = []; - var segRows; - var row; - - segRows = this.groupSegRows(segs); // group into nested arrays - - // iterate each row of segment groupings - for (row = 0; row < segRows.length; row++) { - rowStructs.push( - this.renderSegRow(row, segRows[row]) - ); - } - - return rowStructs; - }, - - - // Builds the HTML to be used for the default element for an individual segment - fgSegHtml: function(seg, disableResizing) { - var view = this.view; - var isRTL = view.opt('isRTL'); - var event = seg.event; - var isDraggable = view.isEventDraggable(event); - var isResizable = !disableResizing && event.allDay && seg.isEnd && view.isEventResizable(event); - var classes = this.getSegClasses(seg, isDraggable, isResizable); - var skinCss = this.getEventSkinCss(event); - var timeHtml = ''; - var titleHtml; - - classes.unshift('fc-day-grid-event'); - - // Only display a timed events time if it is the starting segment - if (!event.allDay && seg.isStart) { - timeHtml = '' + htmlEscape(view.getEventTimeText(event)) + ''; - } - - titleHtml = - '' + - (htmlEscape(event.title || '') || ' ') + // we always want one line of height - ''; - - return '
    ' + - '
    ' + - (isRTL ? - titleHtml + ' ' + timeHtml : // put a natural space in between - timeHtml + ' ' + titleHtml // - ) + - '
    ' + - (isResizable ? - '
    ' : - '' - ) + - ''; - }, - - - // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains - // the segments. Returns object with a bunch of internal data about how the render was calculated. - renderSegRow: function(row, rowSegs) { - var view = this.view; - var colCnt = view.colCnt; - var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels - var levelCnt = Math.max(1, segLevels.length); // ensure at least one level - var tbody = $(''); - var segMatrix = []; // lookup for which segments are rendered into which level+col cells - var cellMatrix = []; // lookup for all elements of the level+col matrix - var loneCellMatrix = []; // lookup for elements that only take up a single column - var i, levelSegs; - var col; - var tr; - var j, seg; - var td; - - // populates empty cells from the current column (`col`) to `endCol` - function emptyCellsUntil(endCol) { - while (col < endCol) { - // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell - td = (loneCellMatrix[i - 1] || [])[col]; - if (td) { - td.attr( - 'rowspan', - parseInt(td.attr('rowspan') || 1, 10) + 1 - ); - } - else { - td = $(''); - tr.append(td); - } - cellMatrix[i][col] = td; - loneCellMatrix[i][col] = td; - col++; - } - } - - for (i = 0; i < levelCnt; i++) { // iterate through all levels - levelSegs = segLevels[i]; - col = 0; - tr = $(''); - - segMatrix.push([]); - cellMatrix.push([]); - loneCellMatrix.push([]); - - // levelCnt might be 1 even though there are no actual levels. protect against this. - // this single empty row is useful for styling. - if (levelSegs) { - for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level - seg = levelSegs[j]; - - emptyCellsUntil(seg.leftCol); - - // create a container that occupies or more columns. append the event element. - td = $('').append(seg.el); - if (seg.leftCol != seg.rightCol) { - td.attr('colspan', seg.rightCol - seg.leftCol + 1); - } - else { // a single-column segment - loneCellMatrix[i][col] = td; - } - - while (col <= seg.rightCol) { - cellMatrix[i][col] = td; - segMatrix[i][col] = seg; - col++; - } - - tr.append(td); - } - } - - emptyCellsUntil(colCnt); // finish off the row - this.bookendCells(tr, 'eventSkeleton'); - tbody.append(tr); - } - - return { // a "rowStruct" - row: row, // the row number - tbodyEl: tbody, - cellMatrix: cellMatrix, - segMatrix: segMatrix, - segLevels: segLevels, - segs: rowSegs - }; - }, - - - // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels. - buildSegLevels: function(segs) { - var levels = []; - var i, seg; - var j; - - // Give preference to elements with certain criteria, so they have - // a chance to be closer to the top. - segs.sort(compareSegs); - - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - - // loop through levels, starting with the topmost, until the segment doesn't collide with other segments - for (j = 0; j < levels.length; j++) { - if (!isDaySegCollision(seg, levels[j])) { - break; - } - } - // `j` now holds the desired subrow index - seg.level = j; - - // create new level array if needed and append segment - (levels[j] || (levels[j] = [])).push(seg); - } - - // order segments left-to-right. very important if calendar is RTL - for (j = 0; j < levels.length; j++) { - levels[j].sort(compareDaySegCols); - } - - return levels; - }, - - - // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row - groupSegRows: function(segs) { - var view = this.view; - var segRows = []; - var i; - - for (i = 0; i < view.rowCnt; i++) { - segRows.push([]); - } - - for (i = 0; i < segs.length; i++) { - segRows[segs[i].row].push(segs[i]); - } - - return segRows; - } - -}); - - -// Computes whether two segments' columns collide. They are assumed to be in the same row. -function isDaySegCollision(seg, otherSegs) { - var i, otherSeg; - - for (i = 0; i < otherSegs.length; i++) { - otherSeg = otherSegs[i]; - - if ( - otherSeg.leftCol <= seg.rightCol && - otherSeg.rightCol >= seg.leftCol - ) { - return true; - } - } - - return false; -} - - -// A cmp function for determining the leftmost event -function compareDaySegCols(a, b) { - return a.leftCol - b.leftCol; -} - -;; - -/* Methods relate to limiting the number events for a given day on a DayGrid -----------------------------------------------------------------------------------------------------------------------*/ -// NOTE: all the segs being passed around in here are foreground segs - -$.extend(DayGrid.prototype, { - - - segPopover: null, // the Popover that holds events that can't fit in a cell. null when not visible - popoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible - - - destroySegPopover: function() { - if (this.segPopover) { - this.segPopover.hide(); // will trigger destruction of `segPopover` and `popoverSegs` - } - }, - - - // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid. - // `levelLimit` can be false (don't limit), a number, or true (should be computed). - limitRows: function(levelLimit) { - var rowStructs = this.rowStructs || []; - var row; // row # - var rowLevelLimit; - - for (row = 0; row < rowStructs.length; row++) { - this.unlimitRow(row); - - if (!levelLimit) { - rowLevelLimit = false; - } - else if (typeof levelLimit === 'number') { - rowLevelLimit = levelLimit; - } - else { - rowLevelLimit = this.computeRowLevelLimit(row); - } - - if (rowLevelLimit !== false) { - this.limitRow(row, rowLevelLimit); - } - } - }, - - - // Computes the number of levels a row will accomodate without going outside its bounds. - // Assumes the row is "rigid" (maintains a constant height regardless of what is inside). - // `row` is the row number. - computeRowLevelLimit: function(row) { - var rowEl = this.rowEls.eq(row); // the containing "fake" row div - var rowHeight = rowEl.height(); // TODO: cache somehow? - var trEls = this.rowStructs[row].tbodyEl.children(); - var i, trEl; - - // Reveal one level at a time and stop when we find one out of bounds - for (i = 0; i < trEls.length; i++) { - trEl = trEls.eq(i).removeClass('fc-limited'); // get and reveal - if (trEl.position().top + trEl.outerHeight() > rowHeight) { - return i; - } - } - - return false; // should not limit at all - }, - - - // Limits the given grid row to the maximum number of levels and injects "more" links if necessary. - // `row` is the row number. - // `levelLimit` is a number for the maximum (inclusive) number of levels allowed. - limitRow: function(row, levelLimit) { - var _this = this; - var view = this.view; - var rowStruct = this.rowStructs[row]; - var moreNodes = []; // array of "more" links and DOM nodes - var col = 0; // col # - var cell; - var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right - var cellMatrix; // a matrix (by level, then column) of all jQuery elements in the row - var limitedNodes; // array of temporarily hidden level and segment DOM nodes - var i, seg; - var segsBelow; // array of segment objects below `seg` in the current `col` - var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies - var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column) - var td, rowspan; - var segMoreNodes; // array of "more" cells that will stand-in for the current seg's cell - var j; - var moreTd, moreWrap, moreLink; - - // Iterates through empty level cells and places "more" links inside if need be - function emptyCellsUntil(endCol) { // goes from current `col` to `endCol` - while (col < endCol) { - cell = { row: row, col: col }; - segsBelow = _this.getCellSegs(cell, levelLimit); - if (segsBelow.length) { - td = cellMatrix[levelLimit - 1][col]; - moreLink = _this.renderMoreLink(cell, segsBelow); - moreWrap = $('
    ').append(moreLink); - td.append(moreWrap); - moreNodes.push(moreWrap[0]); - } - col++; - } - } - - if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit? - levelSegs = rowStruct.segLevels[levelLimit - 1]; - cellMatrix = rowStruct.cellMatrix; - - limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level elements past the limit - .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array - - // iterate though segments in the last allowable level - for (i = 0; i < levelSegs.length; i++) { - seg = levelSegs[i]; - emptyCellsUntil(seg.leftCol); // process empty cells before the segment - - // determine *all* segments below `seg` that occupy the same columns - colSegsBelow = []; - totalSegsBelow = 0; - while (col <= seg.rightCol) { - cell = { row: row, col: col }; - segsBelow = this.getCellSegs(cell, levelLimit); - colSegsBelow.push(segsBelow); - totalSegsBelow += segsBelow.length; - col++; - } - - if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links? - td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell - rowspan = td.attr('rowspan') || 1; - segMoreNodes = []; - - // make a replacement for each column the segment occupies. will be one for each colspan - for (j = 0; j < colSegsBelow.length; j++) { - moreTd = $('').attr('rowspan', rowspan); - segsBelow = colSegsBelow[j]; - cell = { row: row, col: seg.leftCol + j }; - moreLink = this.renderMoreLink(cell, [ seg ].concat(segsBelow)); // count seg as hidden too - moreWrap = $('
    ').append(moreLink); - moreTd.append(moreWrap); - segMoreNodes.push(moreTd[0]); - moreNodes.push(moreTd[0]); - } - - td.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements - limitedNodes.push(td[0]); - } - } - - emptyCellsUntil(view.colCnt); // finish off the level - rowStruct.moreEls = $(moreNodes); // for easy undoing later - rowStruct.limitedEls = $(limitedNodes); // for easy undoing later - } - }, - - - // Reveals all levels and removes all "more"-related elements for a grid's row. - // `row` is a row number. - unlimitRow: function(row) { - var rowStruct = this.rowStructs[row]; - - if (rowStruct.moreEls) { - rowStruct.moreEls.remove(); - rowStruct.moreEls = null; - } - - if (rowStruct.limitedEls) { - rowStruct.limitedEls.removeClass('fc-limited'); - rowStruct.limitedEls = null; - } - }, - - - // Renders an element that represents hidden event element for a cell. - // Responsible for attaching click handler as well. - renderMoreLink: function(cell, hiddenSegs) { - var _this = this; - var view = this.view; - - return $('') - .text( - this.getMoreLinkText(hiddenSegs.length) - ) - .on('click', function(ev) { - var clickOption = view.opt('eventLimitClick'); - var date = view.cellToDate(cell); - var moreEl = $(this); - var dayEl = _this.getCellDayEl(cell); - var allSegs = _this.getCellSegs(cell); - - // rescope the segments to be within the cell's date - var reslicedAllSegs = _this.resliceDaySegs(allSegs, date); - var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date); - - if (typeof clickOption === 'function') { - // the returned value can be an atomic option - clickOption = view.trigger('eventLimitClick', null, { - date: date, - dayEl: dayEl, - moreEl: moreEl, - segs: reslicedAllSegs, - hiddenSegs: reslicedHiddenSegs - }, ev); - } - - if (clickOption === 'popover') { - _this.showSegPopover(date, cell, moreEl, reslicedAllSegs); - } - else if (typeof clickOption === 'string') { // a view name - view.calendar.zoomTo(date, clickOption); - } - }); - }, - - - // Reveals the popover that displays all events within a cell - showSegPopover: function(date, cell, moreLink, segs) { - var _this = this; - var view = this.view; - var moreWrap = moreLink.parent(); // the
    wrapper around the - var topEl; // the element we want to match the top coordinate of - var options; - - if (view.rowCnt == 1) { - topEl = this.view.el; // will cause the popover to cover any sort of header - } - else { - topEl = this.rowEls.eq(cell.row); // will align with top of row - } - - options = { - className: 'fc-more-popover', - content: this.renderSegPopoverContent(date, segs), - parentEl: this.el, - top: topEl.offset().top, - autoHide: true, // when the user clicks elsewhere, hide the popover - viewportConstrain: view.opt('popoverViewportConstrain'), - hide: function() { - // destroy everything when the popover is hidden - _this.segPopover.destroy(); - _this.segPopover = null; - _this.popoverSegs = null; - } - }; - - // Determine horizontal coordinate. - // We use the moreWrap instead of the to avoid border confusion. - if (view.opt('isRTL')) { - options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border - } - else { - options.left = moreWrap.offset().left - 1; // -1 to be over cell border - } - - this.segPopover = new Popover(options); - this.segPopover.show(); - }, - - - // Builds the inner DOM contents of the segment popover - renderSegPopoverContent: function(date, segs) { - var view = this.view; - var isTheme = view.opt('theme'); - var title = date.format(view.opt('dayPopoverFormat')); - var content = $( - '
    ' + - '' + - '' + - htmlEscape(title) + - '' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' - ); - var segContainer = content.find('.fc-event-container'); - var i; - - // render each seg's `el` and only return the visible segs - segs = this.renderFgSegEls(segs, true); // disableResizing=true - this.popoverSegs = segs; - - for (i = 0; i < segs.length; i++) { - - // because segments in the popover are not part of a grid coordinate system, provide a hint to any - // grids that want to do drag-n-drop about which cell it came from - segs[i].cellDate = date; - - segContainer.append(segs[i].el); - } - - return content; - }, - - - // Given the events within an array of segment objects, reslice them to be in a single day - resliceDaySegs: function(segs, dayDate) { - - // build an array of the original events - var events = $.map(segs, function(seg) { - return seg.event; - }); - - var dayStart = dayDate.clone().stripTime(); - var dayEnd = dayStart.clone().add(1, 'days'); - - // slice the events with a custom slicing function - return this.eventsToSegs( - events, - function(rangeStart, rangeEnd) { - var seg = intersectionToSeg(rangeStart, rangeEnd, dayStart, dayEnd); // if no intersection, undefined - return seg ? [ seg ] : []; // must return an array of segments - } - ); - }, - - - // Generates the text that should be inside a "more" link, given the number of events it represents - getMoreLinkText: function(num) { - var view = this.view; - var opt = view.opt('eventLimitText'); - - if (typeof opt === 'function') { - return opt(num); - } - else { - return '+' + num + ' ' + opt; - } - }, - - - // Returns segments within a given cell. - // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs. - getCellSegs: function(cell, startLevel) { - var segMatrix = this.rowStructs[cell.row].segMatrix; - var level = startLevel || 0; - var segs = []; - var seg; - - while (level < segMatrix.length) { - seg = segMatrix[level][cell.col]; - if (seg) { - segs.push(seg); - } - level++; - } - - return segs; - } - -}); - -;; - -/* A component that renders one or more columns of vertical time slots -----------------------------------------------------------------------------------------------------------------------*/ - -function TimeGrid(view) { - Grid.call(this, view); // call the super-constructor -} - - -TimeGrid.prototype = createObject(Grid.prototype); // define the super-class -$.extend(TimeGrid.prototype, { - - slotDuration: null, // duration of a "slot", a distinct time segment on given day, visualized by lines - snapDuration: null, // granularity of time for dragging and selecting - - minTime: null, // Duration object that denotes the first visible time of any given day - maxTime: null, // Duration object that denotes the exclusive visible end time of any given day - - dayEls: null, // cells elements in the day-row background - slatEls: null, // elements running horizontally across all columns - - slatTops: null, // an array of top positions, relative to the container. last item holds bottom of last slot - - helperEl: null, // cell skeleton element for rendering the mock event "helper" - - businessHourSegs: null, - - - // Renders the time grid into `this.el`, which should already be assigned. - // Relies on the view's colCnt. In the future, this component should probably be self-sufficient. - render: function() { - this.processOptions(); - - this.el.html(this.renderHtml()); - - this.dayEls = this.el.find('.fc-day'); - this.slatEls = this.el.find('.fc-slats tr'); - - this.computeSlatTops(); - - this.renderBusinessHours(); - - Grid.prototype.render.call(this); // call the super-method - }, - - - renderBusinessHours: function() { - var events = this.view.calendar.getBusinessHoursEvents(); - this.businessHourSegs = this.renderFill('businessHours', this.eventsToSegs(events), 'bgevent'); - }, - - - // Renders the basic HTML skeleton for the grid - renderHtml: function() { - return '' + - '
    ' + - '' + - this.rowHtml('slotBg') + // leverages RowRenderer, which will call slotBgCellHtml - '
    ' + - '
    ' + - '
    ' + - '' + - this.slatRowHtml() + - '
    ' + - '
    '; - }, - - - // Renders the HTML for a vertical background cell behind the slots. - // This method is distinct from 'bg' because we wanted a new `rowType` so the View could customize the rendering. - slotBgCellHtml: function(row, col, date) { - return this.bgCellHtml(row, col, date); - }, - - - // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL. - slatRowHtml: function() { - var view = this.view; - var calendar = view.calendar; - var isRTL = view.opt('isRTL'); - var html = ''; - var slotNormal = this.slotDuration.asMinutes() % 15 === 0; - var slotTime = moment.duration(+this.minTime); // wish there was .clone() for durations - var slotDate; // will be on the view's first day, but we only care about its time - var minutes; - var axisHtml; - - // Calculate the time for each slot - while (slotTime < this.maxTime) { - slotDate = view.start.clone().time(slotTime); // will be in UTC but that's good. to avoid DST issues - minutes = slotDate.minutes(); - - axisHtml = - '' + - ((!slotNormal || !minutes) ? // if irregular slot duration, or on the hour, then display the time - '' + // for matchCellWidths - htmlEscape(calendar.formatDate(slotDate, view.opt('axisFormat'))) + - '' : - '' - ) + - ''; - - html += - '' + - (!isRTL ? axisHtml : '') + - '' + - (isRTL ? axisHtml : '') + - ""; - - slotTime.add(this.slotDuration); - } - - return html; - }, - - - // Parses various options into properties of this object - processOptions: function() { - var view = this.view; - var slotDuration = view.opt('slotDuration'); - var snapDuration = view.opt('snapDuration'); - - slotDuration = moment.duration(slotDuration); - snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration; - - this.slotDuration = slotDuration; - this.snapDuration = snapDuration; - this.cellDuration = snapDuration; // important to assign this for Grid.events.js - - this.minTime = moment.duration(view.opt('minTime')); - this.maxTime = moment.duration(view.opt('maxTime')); - }, - - - // Slices up a date range into a segment for each column - rangeToSegs: function(rangeStart, rangeEnd) { - var view = this.view; - var segs = []; - var seg; - var col; - var cellDate; - var colStart, colEnd; - - // normalize - rangeStart = rangeStart.clone().stripZone(); - rangeEnd = rangeEnd.clone().stripZone(); - - for (col = 0; col < view.colCnt; col++) { - cellDate = view.cellToDate(0, col); // use the View's cell system for this - colStart = cellDate.clone().time(this.minTime); - colEnd = cellDate.clone().time(this.maxTime); - seg = intersectionToSeg(rangeStart, rangeEnd, colStart, colEnd); - if (seg) { - seg.col = col; - segs.push(seg); - } - } - - return segs; - }, - - - /* Coordinates - ------------------------------------------------------------------------------------------------------------------*/ - - - // Called when there is a window resize/zoom and we need to recalculate coordinates for the grid - resize: function() { - this.computeSlatTops(); - this.updateSegVerticals(); - }, - - - // Populates the given empty `rows` and `cols` arrays with offset positions of the "snap" cells. - // "Snap" cells are different the slots because they might have finer granularity. - buildCoords: function(rows, cols) { - var colCnt = this.view.colCnt; - var originTop = this.el.offset().top; - var snapTime = moment.duration(+this.minTime); - var p = null; - var e, n; - - this.dayEls.slice(0, colCnt).each(function(i, _e) { - e = $(_e); - n = e.offset().left; - if (p) { - p[1] = n; - } - p = [ n ]; - cols[i] = p; - }); - p[1] = n + e.outerWidth(); - - p = null; - while (snapTime < this.maxTime) { - n = originTop + this.computeTimeTop(snapTime); - if (p) { - p[1] = n; - } - p = [ n ]; - rows.push(p); - snapTime.add(this.snapDuration); - } - p[1] = originTop + this.computeTimeTop(snapTime); // the position of the exclusive end - }, - - - // Gets the datetime for the given slot cell - getCellDate: function(cell) { - var view = this.view; - var calendar = view.calendar; - - return calendar.rezoneDate( // since we are adding a time, it needs to be in the calendar's timezone - view.cellToDate(0, cell.col) // View's coord system only accounts for start-of-day for column - .time(this.minTime + this.snapDuration * cell.row) - ); - }, - - - // Gets the element that represents the whole-day the cell resides on - getCellDayEl: function(cell) { - return this.dayEls.eq(cell.col); - }, - - - // Computes the top coordinate, relative to the bounds of the grid, of the given date. - // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight. - computeDateTop: function(date, startOfDayDate) { - return this.computeTimeTop( - moment.duration( - date.clone().stripZone() - startOfDayDate.clone().stripTime() - ) - ); - }, - - - // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration). - computeTimeTop: function(time) { - var slatCoverage = (time - this.minTime) / this.slotDuration; // floating-point value of # of slots covered - var slatIndex; - var slatRemainder; - var slatTop; - var slatBottom; - - // constrain. because minTime/maxTime might be customized - slatCoverage = Math.max(0, slatCoverage); - slatCoverage = Math.min(this.slatEls.length, slatCoverage); - - slatIndex = Math.floor(slatCoverage); // an integer index of the furthest whole slot - slatRemainder = slatCoverage - slatIndex; - slatTop = this.slatTops[slatIndex]; // the top position of the furthest whole slot - - if (slatRemainder) { // time spans part-way into the slot - slatBottom = this.slatTops[slatIndex + 1]; - return slatTop + (slatBottom - slatTop) * slatRemainder; // part-way between slots - } - else { - return slatTop; - } - }, - - - // Queries each `slatEl` for its position relative to the grid's container and stores it in `slatTops`. - // Includes the the bottom of the last slat as the last item in the array. - computeSlatTops: function() { - var tops = []; - var top; - - this.slatEls.each(function(i, node) { - top = $(node).position().top; - tops.push(top); - }); - - tops.push(top + this.slatEls.last().outerHeight()); // bottom of the last slat - - this.slatTops = tops; - }, - - - /* Event Drag Visualization - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event being dragged over the specified date(s). - // `end` and `seg` can be null. See View's documentation on renderDrag for more info. - renderDrag: function(start, end, seg) { - var opacity; - - if (seg) { // if there is event information for this drag, render a helper event - this.renderRangeHelper(start, end, seg); - - opacity = this.view.opt('dragOpacity'); - if (opacity !== undefined) { - this.helperEl.css('opacity', opacity); - } - - return true; // signal that a helper has been rendered - } - else { - // otherwise, just render a highlight - this.renderHighlight( - start, - end || this.view.calendar.getDefaultEventEnd(false, start) - ); - } - }, - - - // Unrenders any visual indication of an event being dragged - destroyDrag: function() { - this.destroyHelper(); - this.destroyHighlight(); - }, - - - /* Event Resize Visualization - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event being resized - renderResize: function(start, end, seg) { - this.renderRangeHelper(start, end, seg); - }, - - - // Unrenders any visual indication of an event being resized - destroyResize: function() { - this.destroyHelper(); - }, - - - /* Event Helper - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a mock "helper" event. `sourceSeg` is the original segment object and might be null (an external drag) - renderHelper: function(event, sourceSeg) { - var segs = this.eventsToSegs([ event ]); - var tableEl; - var i, seg; - var sourceEl; - - segs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered - tableEl = this.renderSegTable(segs); - - // Try to make the segment that is in the same row as sourceSeg look the same - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - if (sourceSeg && sourceSeg.col === seg.col) { - sourceEl = sourceSeg.el; - seg.el.css({ - left: sourceEl.css('left'), - right: sourceEl.css('right'), - 'margin-left': sourceEl.css('margin-left'), - 'margin-right': sourceEl.css('margin-right') - }); - } - } - - this.helperEl = $('
    ') - .append(tableEl) - .appendTo(this.el); - }, - - - // Unrenders any mock helper event - destroyHelper: function() { - if (this.helperEl) { - this.helperEl.remove(); - this.helperEl = null; - } - }, - - - /* Selection - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight. - renderSelection: function(start, end) { - if (this.view.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered - this.renderRangeHelper(start, end); - } - else { - this.renderHighlight(start, end); - } - }, - - - // Unrenders any visual indication of a selection - destroySelection: function() { - this.destroyHelper(); - this.destroyHighlight(); - }, - - - /* Fill System (highlight, background events, business hours) - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a set of rectangles over the given time segments. - // Only returns segments that successfully rendered. - renderFill: function(type, segs, className) { - var view = this.view; - var segCols; - var skeletonEl; - var trEl; - var col, colSegs; - var tdEl; - var containerEl; - var dayDate; - var i, seg; - - if (segs.length) { - - segs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs - segCols = this.groupSegCols(segs); // group into sub-arrays, and assigns 'col' to each seg - - className = className || type.toLowerCase(); - skeletonEl = $( - '
    ' + - '
    ' + - '
    ' - ); - trEl = skeletonEl.find('tr'); - - for (col = 0; col < segCols.length; col++) { - colSegs = segCols[col]; - tdEl = $('').appendTo(trEl); - - if (colSegs.length) { - containerEl = $('
    ').appendTo(tdEl); - dayDate = view.cellToDate(0, col); - - for (i = 0; i < colSegs.length; i++) { - seg = colSegs[i]; - containerEl.append( - seg.el.css({ - top: this.computeDateTop(seg.start, dayDate), - bottom: -this.computeDateTop(seg.end, dayDate) // the y position of the bottom edge - }) - ); - } - } - } - - this.bookendCells(trEl, type); - - this.el.append(skeletonEl); - this.elsByFill[type] = skeletonEl; - } - - return segs; - } - -}); - -;; - -/* Event-rendering methods for the TimeGrid class -----------------------------------------------------------------------------------------------------------------------*/ - -$.extend(TimeGrid.prototype, { - - eventSkeletonEl: null, // has cells with event-containers, which contain absolutely positioned event elements - - - // Renders the given foreground event segments onto the grid - renderFgSegs: function(segs) { - segs = this.renderFgSegEls(segs); // returns a subset of the segs. segs that were actually rendered - - this.el.append( - this.eventSkeletonEl = $('
    ') - .append(this.renderSegTable(segs)) - ); - - return segs; // return only the segs that were actually rendered - }, - - - // Unrenders all currently rendered foreground event segments - destroyFgSegs: function(segs) { - if (this.eventSkeletonEl) { - this.eventSkeletonEl.remove(); - this.eventSkeletonEl = null; - } - }, - - - // Renders and returns the portion of the event-skeleton. - // Returns an object with properties 'tbodyEl' and 'segs'. - renderSegTable: function(segs) { - var tableEl = $('
    '); - var trEl = tableEl.find('tr'); - var segCols; - var i, seg; - var col, colSegs; - var containerEl; - - segCols = this.groupSegCols(segs); // group into sub-arrays, and assigns 'col' to each seg - - this.computeSegVerticals(segs); // compute and assign top/bottom - - for (col = 0; col < segCols.length; col++) { // iterate each column grouping - colSegs = segCols[col]; - placeSlotSegs(colSegs); // compute horizontal coordinates, z-index's, and reorder the array - - containerEl = $('
    '); - - // assign positioning CSS and insert into container - for (i = 0; i < colSegs.length; i++) { - seg = colSegs[i]; - seg.el.css(this.generateSegPositionCss(seg)); - - // if the height is short, add a className for alternate styling - if (seg.bottom - seg.top < 30) { - seg.el.addClass('fc-short'); - } - - containerEl.append(seg.el); - } - - trEl.append($('').append(containerEl)); - } - - this.bookendCells(trEl, 'eventSkeleton'); - - return tableEl; - }, - - - // Refreshes the CSS top/bottom coordinates for each segment element. Probably after a window resize/zoom. - // Repositions business hours segs too, so not just for events. Maybe shouldn't be here. - updateSegVerticals: function() { - var allSegs = (this.segs || []).concat(this.businessHourSegs || []); - var i; - - this.computeSegVerticals(allSegs); - - for (i = 0; i < allSegs.length; i++) { - allSegs[i].el.css( - this.generateSegVerticalCss(allSegs[i]) - ); - } - }, - - - // For each segment in an array, computes and assigns its top and bottom properties - computeSegVerticals: function(segs) { - var i, seg; - - for (i = 0; i < segs.length; i++) { - seg = segs[i]; - seg.top = this.computeDateTop(seg.start, seg.start); - seg.bottom = this.computeDateTop(seg.end, seg.start); - } - }, - - - // Renders the HTML for a single event segment's default rendering - fgSegHtml: function(seg, disableResizing) { - var view = this.view; - var event = seg.event; - var isDraggable = view.isEventDraggable(event); - var isResizable = !disableResizing && seg.isEnd && view.isEventResizable(event); - var classes = this.getSegClasses(seg, isDraggable, isResizable); - var skinCss = this.getEventSkinCss(event); - var timeText; - var fullTimeText; // more verbose time text. for the print stylesheet - var startTimeText; // just the start time text - - classes.unshift('fc-time-grid-event'); - - if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day... - // Don't display time text on segments that run entirely through a day. - // That would appear as midnight-midnight and would look dumb. - // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am) - if (seg.isStart || seg.isEnd) { - timeText = view.getEventTimeText(seg.start, seg.end); - fullTimeText = view.getEventTimeText(seg.start, seg.end, 'LT'); - startTimeText = view.getEventTimeText(seg.start, null); - } - } else { - // Display the normal time text for the *event's* times - timeText = view.getEventTimeText(event); - fullTimeText = view.getEventTimeText(event, 'LT'); - startTimeText = view.getEventTimeText(event.start, null); - } - - return '' + - '
    ' + - (timeText ? - '
    ' + - '' + htmlEscape(timeText) + '' + - '
    ' : - '' - ) + - (event.title ? - '
    ' + - htmlEscape(event.title) + - '
    ' : - '' - ) + - '
    ' + - '
    ' + - (isResizable ? - '
    ' : - '' - ) + - ''; - }, - - - // Generates an object with CSS properties/values that should be applied to an event segment element. - // Contains important positioning-related properties that should be applied to any event element, customized or not. - generateSegPositionCss: function(seg) { - var view = this.view; - var isRTL = view.opt('isRTL'); - var shouldOverlap = view.opt('slotEventOverlap'); - var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point - var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point - var props = this.generateSegVerticalCss(seg); // get top/bottom first - var left; // amount of space from left edge, a fraction of the total width - var right; // amount of space from right edge, a fraction of the total width - - if (shouldOverlap) { - // double the width, but don't go beyond the maximum forward coordinate (1.0) - forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2); - } - - if (isRTL) { - left = 1 - forwardCoord; - right = backwardCoord; - } - else { - left = backwardCoord; - right = 1 - forwardCoord; - } - - props.zIndex = seg.level + 1; // convert from 0-base to 1-based - props.left = left * 100 + '%'; - props.right = right * 100 + '%'; - - if (shouldOverlap && seg.forwardPressure) { - // add padding to the edge so that forward stacked events don't cover the resizer's icon - props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width - } - - return props; - }, - - - // Generates an object with CSS properties for the top/bottom coordinates of a segment element - generateSegVerticalCss: function(seg) { - return { - top: seg.top, - bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container - }; - }, - - - // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col - groupSegCols: function(segs) { - var view = this.view; - var segCols = []; - var i; - - for (i = 0; i < view.colCnt; i++) { - segCols.push([]); - } - - for (i = 0; i < segs.length; i++) { - segCols[segs[i].col].push(segs[i]); - } - - return segCols; - } - -}); - - -// Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each. -// Also reorders the given array by date! -function placeSlotSegs(segs) { - var levels; - var level0; - var i; - - segs.sort(compareSegs); // order by date - levels = buildSlotSegLevels(segs); - computeForwardSlotSegs(levels); - - if ((level0 = levels[0])) { - - for (i = 0; i < level0.length; i++) { - computeSlotSegPressures(level0[i]); - } - - for (i = 0; i < level0.length; i++) { - computeSlotSegCoords(level0[i], 0, 0); - } - } -} - - -// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is -// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date. -function buildSlotSegLevels(segs) { - var levels = []; - var i, seg; - var j; - - for (i=0; i seg2.top && seg1.top < seg2.bottom; -} - - -// A cmp function for determining which forward segment to rely on more when computing coordinates. -function compareForwardSlotSegs(seg1, seg2) { - // put higher-pressure first - return seg2.forwardPressure - seg1.forwardPressure || - // put segments that are closer to initial edge first (and favor ones with no coords yet) - (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) || - // do normal sorting... - compareSegs(seg1, seg2); -} - -;; - -/* An abstract class from which other views inherit from -----------------------------------------------------------------------------------------------------------------------*/ -// Newer methods should be written as prototype methods, not in the monster `View` function at the bottom. - -View.prototype = { - - calendar: null, // owner Calendar object - coordMap: null, // a CoordMap object for converting pixel regions to dates - el: null, // the view's containing element. set by Calendar - - // important Moments - start: null, // the date of the very first cell - end: null, // the date after the very last cell - intervalStart: null, // the start of the interval of time the view represents (1st of month for month view) - intervalEnd: null, // the exclusive end of the interval of time the view represents - - // used for cell-to-date and date-to-cell calculations - rowCnt: null, // # of weeks - colCnt: null, // # of days displayed in a week - - isSelected: false, // boolean whether cells are user-selected or not - - // subclasses can optionally use a scroll container - scrollerEl: null, // the element that will most likely scroll when content is too tall - scrollTop: null, // cached vertical scroll value - - // classNames styled by jqui themes - widgetHeaderClass: null, - widgetContentClass: null, - highlightStateClass: null, - - // document handlers, bound to `this` object - documentMousedownProxy: null, - documentDragStartProxy: null, - - - // Serves as a "constructor" to suppliment the monster `View` constructor below - init: function() { - var tm = this.opt('theme') ? 'ui' : 'fc'; - - this.widgetHeaderClass = tm + '-widget-header'; - this.widgetContentClass = tm + '-widget-content'; - this.highlightStateClass = tm + '-state-highlight'; - - // save references to `this`-bound handlers - this.documentMousedownProxy = $.proxy(this, 'documentMousedown'); - this.documentDragStartProxy = $.proxy(this, 'documentDragStart'); - }, - - - // Renders the view inside an already-defined `this.el`. - // Subclasses should override this and then call the super method afterwards. - render: function() { - this.updateSize(); - this.trigger('viewRender', this, this, this.el); - - // attach handlers to document. do it here to allow for destroy/rerender - $(document) - .on('mousedown', this.documentMousedownProxy) - .on('dragstart', this.documentDragStartProxy); // jqui drag - }, - - - // Clears all view rendering, event elements, and unregisters handlers - destroy: function() { - this.unselect(); - this.trigger('viewDestroy', this, this, this.el); - this.destroyEvents(); - this.el.empty(); // removes inner contents but leaves the element intact - - $(document) - .off('mousedown', this.documentMousedownProxy) - .off('dragstart', this.documentDragStartProxy); - }, - - - // Used to determine what happens when the users clicks next/prev. Given -1 for prev, 1 for next. - // Should apply the delta to `date` (a Moment) and return it. - incrementDate: function(date, delta) { - // subclasses should implement - }, - - - /* Dimensions - ------------------------------------------------------------------------------------------------------------------*/ - - - // Refreshes anything dependant upon sizing of the container element of the grid - updateSize: function(isResize) { - if (isResize) { - this.recordScroll(); - } - this.updateHeight(); - this.updateWidth(); - }, - - - // Refreshes the horizontal dimensions of the calendar - updateWidth: function() { - // subclasses should implement - }, - - - // Refreshes the vertical dimensions of the calendar - updateHeight: function() { - var calendar = this.calendar; // we poll the calendar for height information - - this.setHeight( - calendar.getSuggestedViewHeight(), - calendar.isHeightAuto() - ); - }, - - - // Updates the vertical dimensions of the calendar to the specified height. - // if `isAuto` is set to true, height becomes merely a suggestion and the view should use its "natural" height. - setHeight: function(height, isAuto) { - // subclasses should implement - }, - - - // Given the total height of the view, return the number of pixels that should be used for the scroller. - // Utility for subclasses. - computeScrollerHeight: function(totalHeight) { - var both = this.el.add(this.scrollerEl); - var otherHeight; // cumulative height of everything that is not the scrollerEl in the view (header+borders) - - // fuckin IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked - both.css({ - position: 'relative', // cause a reflow, which will force fresh dimension recalculation - left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll - }); - otherHeight = this.el.outerHeight() - this.scrollerEl.height(); // grab the dimensions - both.css({ position: '', left: '' }); // undo hack - - return totalHeight - otherHeight; - }, - - - // Called for remembering the current scroll value of the scroller. - // Should be called before there is a destructive operation (like removing DOM elements) that might inadvertently - // change the scroll of the container. - recordScroll: function() { - if (this.scrollerEl) { - this.scrollTop = this.scrollerEl.scrollTop(); - } - }, - - - // Set the scroll value of the scroller to the previously recorded value. - // Should be called after we know the view's dimensions have been restored following some type of destructive - // operation (like temporarily removing DOM elements). - restoreScroll: function() { - if (this.scrollTop !== null) { - this.scrollerEl.scrollTop(this.scrollTop); - } - }, - - - /* Events - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders the events onto the view. - // Should be overriden by subclasses. Subclasses should call the super-method afterwards. - renderEvents: function(events) { - this.segEach(function(seg) { - this.trigger('eventAfterRender', seg.event, seg.event, seg.el); - }); - this.trigger('eventAfterAllRender'); - }, - - - // Removes event elements from the view. - // Should be overridden by subclasses. Should call this super-method FIRST, then subclass DOM destruction. - destroyEvents: function() { - this.segEach(function(seg) { - this.trigger('eventDestroy', seg.event, seg.event, seg.el); - }); - }, - - - // Given an event and the default element used for rendering, returns the element that should actually be used. - // Basically runs events and elements through the eventRender hook. - resolveEventEl: function(event, el) { - var custom = this.trigger('eventRender', event, event, el); - - if (custom === false) { // means don't render at all - el = null; - } - else if (custom && custom !== true) { - el = $(custom); - } - - return el; - }, - - - // Hides all rendered event segments linked to the given event - showEvent: function(event) { - this.segEach(function(seg) { - seg.el.css('visibility', ''); - }, event); - }, - - - // Shows all rendered event segments linked to the given event - hideEvent: function(event) { - this.segEach(function(seg) { - seg.el.css('visibility', 'hidden'); - }, event); - }, - - - // Iterates through event segments. Goes through all by default. - // If the optional `event` argument is specified, only iterates through segments linked to that event. - // The `this` value of the callback function will be the view. - segEach: function(func, event) { - var segs = this.getSegs(); - var i; - - for (i = 0; i < segs.length; i++) { - if (!event || segs[i].event._id === event._id) { - func.call(this, segs[i]); - } - } - }, - - - // Retrieves all the rendered segment objects for the view - getSegs: function() { - // subclasses must implement - }, - - - /* Event Drag Visualization - ------------------------------------------------------------------------------------------------------------------*/ - - - // Renders a visual indication of an event hovering over the specified date. - // `end` is a Moment and might be null. - // `seg` might be null. if specified, it is the segment object of the event being dragged. - // otherwise, an external event from outside the calendar is being dragged. - renderDrag: function(start, end, seg) { - // subclasses should implement - }, - - - // Unrenders a visual indication of event hovering - destroyDrag: function() { - // subclasses should implement - }, - - - // Handler for accepting externally dragged events being dropped in the view. - // Gets called when jqui's 'dragstart' is fired. - documentDragStart: function(ev, ui) { - var _this = this; - var calendar = this.calendar; - var eventStart = null; // a null value signals an unsuccessful drag - var eventEnd = null; - var visibleEnd = null; // will be calculated event when no eventEnd - var el; - var accept; - var meta; - var eventProps; // if an object, signals an event should be created upon drop - var dragListener; - - if (this.opt('droppable')) { // only listen if this setting is on - el = $(ev.target); - - // Test that the dragged element passes the dropAccept selector or filter function. - // FYI, the default is "*" (matches all) - accept = this.opt('dropAccept'); - if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) { - - meta = getDraggedElMeta(el); // data for possibly creating an event - eventProps = meta.eventProps; - - // listener that tracks mouse movement over date-associated pixel regions - dragListener = new DragListener(this.coordMap, { - cellOver: function(cell, cellDate) { - eventStart = cellDate; - eventEnd = meta.duration ? eventStart.clone().add(meta.duration) : null; - visibleEnd = eventEnd || calendar.getDefaultEventEnd(!eventStart.hasTime(), eventStart); - - // keep the start/end up to date when dragging - if (eventProps) { - $.extend(eventProps, { start: eventStart, end: eventEnd }); - } - - if (calendar.isExternalDragAllowedInRange(eventStart, visibleEnd, eventProps)) { - _this.renderDrag(eventStart, visibleEnd); - } - else { - eventStart = null; // signal unsuccessful - disableCursor(); - } - }, - cellOut: function() { - eventStart = null; - _this.destroyDrag(); - enableCursor(); - } - }); - - // gets called, only once, when jqui drag is finished - $(document).one('dragstop', function(ev, ui) { - var renderedEvents; - - _this.destroyDrag(); - enableCursor(); - - if (eventStart) { // element was dropped on a valid date/time cell - - // if dropped on an all-day cell, and element's metadata specified a time, set it - if (meta.startTime && !eventStart.hasTime()) { - eventStart.time(meta.startTime); - } - - // trigger 'drop' regardless of whether element represents an event - _this.trigger('drop', el[0], eventStart, ev, ui); - - // create an event from the given properties and the latest dates - if (eventProps) { - renderedEvents = calendar.renderEvent(eventProps, meta.stick); - _this.trigger('eventReceive', null, renderedEvents[0]); // signal an external event landed - } - } - }); - - dragListener.startDrag(ev); // start listening immediately - } - } - }, - - - /* Selection - ------------------------------------------------------------------------------------------------------------------*/ - - - // Selects a date range on the view. `start` and `end` are both Moments. - // `ev` is the native mouse event that begin the interaction. - select: function(start, end, ev) { - this.unselect(ev); - this.renderSelection(start, end); - this.reportSelection(start, end, ev); - }, - - - // Renders a visual indication of the selection - renderSelection: function(start, end) { - // subclasses should implement - }, - - - // Called when a new selection is made. Updates internal state and triggers handlers. - reportSelection: function(start, end, ev) { - this.isSelected = true; - this.trigger('select', null, start, end, ev); - }, - - - // Undoes a selection. updates in the internal state and triggers handlers. - // `ev` is the native mouse event that began the interaction. - unselect: function(ev) { - if (this.isSelected) { - this.isSelected = false; - this.destroySelection(); - this.trigger('unselect', null, ev); - } - }, - - - // Unrenders a visual indication of selection - destroySelection: function() { - // subclasses should implement - }, - - - // Handler for unselecting when the user clicks something and the 'unselectAuto' setting is on - documentMousedown: function(ev) { - var ignore; - - // is there a selection, and has the user made a proper left click? - if (this.isSelected && this.opt('unselectAuto') && isPrimaryMouseButton(ev)) { - - // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element - ignore = this.opt('unselectCancel'); - if (!ignore || !$(ev.target).closest(ignore).length) { - this.unselect(ev); - } - } - } - -}; - - -// We are mixing JavaScript OOP design patterns here by putting methods and member variables in the closed scope of the -// constructor. Going forward, methods should be part of the prototype. -function View(calendar) { - var t = this; - - // exports - t.calendar = calendar; - t.opt = opt; - t.trigger = trigger; - t.isEventDraggable = isEventDraggable; - t.isEventResizable = isEventResizable; - t.eventDrop = eventDrop; - t.eventResize = eventResize; - - // imports - var reportEventChange = calendar.reportEventChange; - - // locals - var options = calendar.options; - var nextDayThreshold = moment.duration(options.nextDayThreshold); - - - t.init(); // the "constructor" that concerns the prototype methods - - - function opt(name) { - var v = options[name]; - if ($.isPlainObject(v) && !isForcedAtomicOption(name)) { - return smartProperty(v, t.name); - } - return v; - } - - - function trigger(name, thisObj) { - return calendar.trigger.apply( - calendar, - [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t]) - ); - } - - - - /* Event Editable Boolean Calculations - ------------------------------------------------------------------------------*/ - - - function isEventDraggable(event) { - var source = event.source || {}; - - return firstDefined( - event.startEditable, - source.startEditable, - opt('eventStartEditable'), - event.editable, - source.editable, - opt('editable') - ); - } - - - function isEventResizable(event) { - var source = event.source || {}; - - return firstDefined( - event.durationEditable, - source.durationEditable, - opt('eventDurationEditable'), - event.editable, - source.editable, - opt('editable') - ); - } - - - - /* Event Elements - ------------------------------------------------------------------------------*/ - - - // Compute the text that should be displayed on an event's element. - // Based off the settings of the view. Possible signatures: - // .getEventTimeText(event, formatStr) - // .getEventTimeText(startMoment, endMoment, formatStr) - // .getEventTimeText(startMoment, null, formatStr) - // `timeFormat` is used but the `formatStr` argument can be used to override. - t.getEventTimeText = function(event, formatStr) { - var start; - var end; - - if (typeof event === 'object' && typeof formatStr === 'object') { - // first two arguments are actually moments (or null). shift arguments. - start = event; - end = formatStr; - formatStr = arguments[2]; - } - else { - // otherwise, an event object was the first argument - start = event.start; - end = event.end; - } - - formatStr = formatStr || opt('timeFormat'); - - if (end && opt('displayEventEnd')) { - return calendar.formatRange(start, end, formatStr); - } - else { - return calendar.formatDate(start, formatStr); - } - }; - - - - /* Event Modification Reporting - ---------------------------------------------------------------------------------*/ - - - function eventDrop(el, event, newStart, ev) { - var mutateResult = calendar.mutateEvent(event, newStart, null); - - trigger( - 'eventDrop', - el, - event, - mutateResult.dateDelta, - function() { - mutateResult.undo(); - reportEventChange(); - }, - ev, - {} // jqui dummy - ); - - reportEventChange(); - } - - - function eventResize(el, event, newEnd, ev) { - var mutateResult = calendar.mutateEvent(event, null, newEnd); - - trigger( - 'eventResize', - el, - event, - mutateResult.durationDelta, - function() { - mutateResult.undo(); - reportEventChange(); - }, - ev, - {} // jqui dummy - ); - - reportEventChange(); - } - - - // ==================================================================================================== - // Utilities for day "cells" - // ==================================================================================================== - // The "basic" views are completely made up of day cells. - // The "agenda" views have day cells at the top "all day" slot. - // This was the obvious common place to put these utilities, but they should be abstracted out into - // a more meaningful class (like DayEventRenderer). - // ==================================================================================================== - - - // For determining how a given "cell" translates into a "date": - // - // 1. Convert the "cell" (row and column) into a "cell offset" (the # of the cell, cronologically from the first). - // Keep in mind that column indices are inverted with isRTL. This is taken into account. - // - // 2. Convert the "cell offset" to a "day offset" (the # of days since the first visible day in the view). - // - // 3. Convert the "day offset" into a "date" (a Moment). - // - // The reverse transformation happens when transforming a date into a cell. - - - // exports - t.isHiddenDay = isHiddenDay; - t.skipHiddenDays = skipHiddenDays; - t.getCellsPerWeek = getCellsPerWeek; - t.dateToCell = dateToCell; - t.dateToDayOffset = dateToDayOffset; - t.dayOffsetToCellOffset = dayOffsetToCellOffset; - t.cellOffsetToCell = cellOffsetToCell; - t.cellToDate = cellToDate; - t.cellToCellOffset = cellToCellOffset; - t.cellOffsetToDayOffset = cellOffsetToDayOffset; - t.dayOffsetToDate = dayOffsetToDate; - t.rangeToSegments = rangeToSegments; - t.isMultiDayEvent = isMultiDayEvent; - - - // internals - var hiddenDays = opt('hiddenDays') || []; // array of day-of-week indices that are hidden - var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool) - var cellsPerWeek; - var dayToCellMap = []; // hash from dayIndex -> cellIndex, for one week - var cellToDayMap = []; // hash from cellIndex -> dayIndex, for one week - var isRTL = opt('isRTL'); - - - // initialize important internal variables - (function() { - - if (opt('weekends') === false) { - hiddenDays.push(0, 6); // 0=sunday, 6=saturday - } - - // Loop through a hypothetical week and determine which - // days-of-week are hidden. Record in both hashes (one is the reverse of the other). - for (var dayIndex=0, cellIndex=0; dayIndex<7; dayIndex++) { - dayToCellMap[dayIndex] = cellIndex; - isHiddenDayHash[dayIndex] = $.inArray(dayIndex, hiddenDays) != -1; - if (!isHiddenDayHash[dayIndex]) { - cellToDayMap[cellIndex] = dayIndex; - cellIndex++; - } - } - - cellsPerWeek = cellIndex; - if (!cellsPerWeek) { - throw 'invalid hiddenDays'; // all days were hidden? bad. - } - - })(); - - - // Is the current day hidden? - // `day` is a day-of-week index (0-6), or a Moment - function isHiddenDay(day) { - if (moment.isMoment(day)) { - day = day.day(); - } - return isHiddenDayHash[day]; - } - - - function getCellsPerWeek() { - return cellsPerWeek; - } - - - // Incrementing the current day until it is no longer a hidden day, returning a copy. - // If the initial value of `date` is not a hidden day, don't do anything. - // Pass `isExclusive` as `true` if you are dealing with an end date. - // `inc` defaults to `1` (increment one day forward each time) - function skipHiddenDays(date, inc, isExclusive) { - var out = date.clone(); - inc = inc || 1; - while ( - isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7] - ) { - out.add(inc, 'days'); - } - return out; - } - - - // - // TRANSFORMATIONS: cell -> cell offset -> day offset -> date - // - - // cell -> date (combines all transformations) - // Possible arguments: - // - row, col - // - { row:#, col: # } - function cellToDate() { - var cellOffset = cellToCellOffset.apply(null, arguments); - var dayOffset = cellOffsetToDayOffset(cellOffset); - var date = dayOffsetToDate(dayOffset); - return date; - } - - // cell -> cell offset - // Possible arguments: - // - row, col - // - { row:#, col:# } - function cellToCellOffset(row, col) { - var colCnt = t.colCnt; - - // rtl variables. wish we could pre-populate these. but where? - var dis = isRTL ? -1 : 1; - var dit = isRTL ? colCnt - 1 : 0; - - if (typeof row == 'object') { - col = row.col; - row = row.row; - } - var cellOffset = row * colCnt + (col * dis + dit); // column, adjusted for RTL (dis & dit) - - return cellOffset; - } - - // cell offset -> day offset - function cellOffsetToDayOffset(cellOffset) { - var day0 = t.start.day(); // first date's day of week - cellOffset += dayToCellMap[day0]; // normlize cellOffset to beginning-of-week - return Math.floor(cellOffset / cellsPerWeek) * 7 + // # of days from full weeks - cellToDayMap[ // # of days from partial last week - (cellOffset % cellsPerWeek + cellsPerWeek) % cellsPerWeek // crazy math to handle negative cellOffsets - ] - - day0; // adjustment for beginning-of-week normalization - } - - // day offset -> date - function dayOffsetToDate(dayOffset) { - return t.start.clone().add(dayOffset, 'days'); - } - - - // - // TRANSFORMATIONS: date -> day offset -> cell offset -> cell - // - - // date -> cell (combines all transformations) - function dateToCell(date) { - var dayOffset = dateToDayOffset(date); - var cellOffset = dayOffsetToCellOffset(dayOffset); - var cell = cellOffsetToCell(cellOffset); - return cell; - } - - // date -> day offset - function dateToDayOffset(date) { - return date.clone().stripTime().diff(t.start, 'days'); - } - - // day offset -> cell offset - function dayOffsetToCellOffset(dayOffset) { - var day0 = t.start.day(); // first date's day of week - dayOffset += day0; // normalize dayOffset to beginning-of-week - return Math.floor(dayOffset / 7) * cellsPerWeek + // # of cells from full weeks - dayToCellMap[ // # of cells from partial last week - (dayOffset % 7 + 7) % 7 // crazy math to handle negative dayOffsets - ] - - dayToCellMap[day0]; // adjustment for beginning-of-week normalization - } - - // cell offset -> cell (object with row & col keys) - function cellOffsetToCell(cellOffset) { - var colCnt = t.colCnt; - - // rtl variables. wish we could pre-populate these. but where? - var dis = isRTL ? -1 : 1; - var dit = isRTL ? colCnt - 1 : 0; - - var row = Math.floor(cellOffset / colCnt); - var col = ((cellOffset % colCnt + colCnt) % colCnt) * dis + dit; // column, adjusted for RTL (dis & dit) - return { - row: row, - col: col - }; - } - - - // - // Converts a date range into an array of segment objects. - // "Segments" are horizontal stretches of time, sliced up by row. - // A segment object has the following properties: - // - row - // - cols - // - isStart - // - isEnd - // - function rangeToSegments(start, end) { - - var rowCnt = t.rowCnt; - var colCnt = t.colCnt; - var segments = []; // array of segments to return - - // day offset for given date range - var dayRange = computeDayRange(start, end); // convert to a whole-day range - var rangeDayOffsetStart = dateToDayOffset(dayRange.start); - var rangeDayOffsetEnd = dateToDayOffset(dayRange.end); // an exclusive value - - // first and last cell offset for the given date range - // "last" implies inclusivity - var rangeCellOffsetFirst = dayOffsetToCellOffset(rangeDayOffsetStart); - var rangeCellOffsetLast = dayOffsetToCellOffset(rangeDayOffsetEnd) - 1; - - // loop through all the rows in the view - for (var row=0; row