From aaf1130569df22805fb15e46217ca303cac733ef Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Wed, 26 Jul 2017 13:59:02 +1200 Subject: [PATCH] Inline fixes --- javascript/tmpl.js | 85 +++++++++++++++++++ src/GridFieldAddNewInlineButton.php | 8 +- .../GridFieldAddNewInlineRow.ss | 2 +- 3 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 javascript/tmpl.js diff --git a/javascript/tmpl.js b/javascript/tmpl.js new file mode 100644 index 0000000..4e815ef --- /dev/null +++ b/javascript/tmpl.js @@ -0,0 +1,85 @@ +/* + * JavaScript Templates 1.0.2 + * https://github.com/blueimp/JavaScript-Templates + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + * + * Inspired by John Resig's JavaScript Micro-Templating: + * http://ejohn.org/blog/javascript-micro-templating/ + */ + +/*jslint evil: true, regexp: true */ +/*global document, define */ + +(function ($) { + "use strict"; + var tmpl = function (str, data) { + var f = !/[^\-\w]/.test(str) ? tmpl.cache[str] = tmpl.cache[str] || + tmpl(tmpl.load(str)) : + new Function( + tmpl.arg, + ("var _s=''" + tmpl.helper + ";_s+='" + + str.replace(tmpl.regexp, tmpl.func) + + "';return _s;").split("_s+='';").join("") + ); + f.tmpl = f.tmpl || tmpl; + return data ? f(data) : f; + }; + tmpl.cache = {}; + tmpl.load = function (id) { + return document.getElementById(id).innerHTML; + }; + tmpl.regexp = /(\s+)|('|\\)(?![^%]*%\})|(?:\{%(=|#)(.+?)%\})|(\{%)|(%\})/g; + tmpl.func = function (s, p1, p2, p3, p4, p5, p6, o, str) { + if (p1) { // whitespace + return o && o + s.length !== str.length ? " " : ""; + } + if (p2) { // single quote or backslash + return "\\" + s; + } + if (p3) { // interpolation: {%=prop%}, or unescaped: {%#prop%} + if (p3 === "=") { + return "'+_e(" + p4 + ")+'"; + } + return "'+(" + p4 + "||'')+'"; + } + if (p5) { // evaluation start tag: {% + return "';"; + } + if (p6) { // evaluation end tag: %} + return "_s+='"; + } + }; + tmpl.encReg = /[<>&"\x00]/g; + tmpl.encMap = { + "<": "<", + ">": ">", + "&": "&", + "\"": """, + "\x00": "" + }; + tmpl.encode = function (s) { + return String(s || "").replace( + tmpl.encReg, + function (c) { + return tmpl.encMap[c]; + } + ); + }; + tmpl.arg = "o"; + tmpl.helper = ",_t=arguments.callee.tmpl,_e=_t.encode" + + ",print=function(s,e){_s+=e&&(s||'')||_e(s);}" + + ",include=function(s,d){_s+=_t(s,d);}"; + if (typeof define === "function" && define.amd) { + // Register as an AMD module: + define("tmpl", function () { + return tmpl; + }); + } else { + $.tmpl = tmpl; + } +}(this)); \ No newline at end of file diff --git a/src/GridFieldAddNewInlineButton.php b/src/GridFieldAddNewInlineButton.php index 9ee05d9..7887cfb 100755 --- a/src/GridFieldAddNewInlineButton.php +++ b/src/GridFieldAddNewInlineButton.php @@ -3,7 +3,6 @@ namespace Symbiote\GridFieldExtensions; use SilverStripe\Core\Convert; -use SilverStripe\Core\Object; use SilverStripe\Forms\Form; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridField_HTMLProvider; @@ -12,6 +11,7 @@ use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\DataObjectInterface; use SilverStripe\ORM\ManyManyList; use SilverStripe\View\ArrayData; +use SilverStripe\Core\Injector\Injector; use SilverStripe\View\Requirements; use Exception; @@ -86,11 +86,11 @@ class GridFieldAddNewInlineButton implements GridField_HTMLProvider, GridField_S $fragment = $this->getFragment(); - if (!$editable = $grid->getConfig()->getComponentByType('GridFieldEditableColumns')) { + if (!$editable = $grid->getConfig()->getComponentByType(GridFieldEditableColumns::class)) { throw new Exception('Inline adding requires the editable columns component'); } - Requirements::javascript(THIRDPARTY_DIR . '/javascript-templates/tmpl.js'); + Requirements::javascript('symbiote/silverstripe-gridfieldextensions:javascript/tmpl.js'); GridFieldExtensions::include_requirements(); $data = new ArrayData(array( @@ -109,7 +109,7 @@ class GridFieldAddNewInlineButton implements GridField_HTMLProvider, GridField_S $handled = array_keys($editable->getDisplayFields($grid)); if ($grid->getList()) { - $record = Object::create($grid->getModelClass()); + $record = Injector::inst()->create($grid->getModelClass()); } else { $record = null; } diff --git a/templates/Symbiote/GridFieldExtensions/GridFieldAddNewInlineRow.ss b/templates/Symbiote/GridFieldExtensions/GridFieldAddNewInlineRow.ss index 3096bfd..07ead62 100644 --- a/templates/Symbiote/GridFieldExtensions/GridFieldAddNewInlineRow.ss +++ b/templates/Symbiote/GridFieldExtensions/GridFieldAddNewInlineRow.ss @@ -3,7 +3,7 @@ <% loop $Me %> <% if $IsActions %> - + <% else %> $Content