Jump to content
apeisa

Fredi - friendly frontend editing

Recommended Posts

Thanks Marty! That is strange. Just tested it with Mac (through excellent browserstack). It doesn't work with Chrome 29 (and not in 30beta), but it does work on 31dev (also in mac).

Also tested with Safari 5.1, which has other issue (doesn't show the editing iFrame at all).

Since this works in IE and FF, so it must have been some bug in earlier chrome versions. I'll take a look at next weekend at latest. I would love to see this working in Safari too.

Share this post


Link to post
Share on other sites

Hey Antti,

I'm experiencing the same issue as Marty (safari 6.0.5) — modal just shows the loading animation.

Share this post


Link to post
Share on other sites

yep, safari has actually different issue. it doesn't show edit page at all. stable chrome allows saving, but doesn't close modal. I am able to reproduce both issues, so should be able to fix after I find time.

  • Like 1

Share this post


Link to post
Share on other sites

Ok, I think I nailed both of those bugs. In my tests this new ajaxified Fredi (available from dev branch) works great on FF, Chrome and Safari. Should work on IE10 too, but will test other IE:s later.

  • Like 2

Share this post


Link to post
Share on other sites

Antti,

Will grab and test now — thanks!

Share this post


Link to post
Share on other sites

Working nicely here on:

Mac:

- Safari

- Chrome

- FF

Windows:

- IE9

- Chrome

After using this a good bit the last week, I think it might be a good idea to set 

body {overflow:hidden} 

via JS while the modal is open. That way only the modal will scroll.

I have some lengthy body fields and sometimes the multiple scrolling can get weird.

Share this post


Link to post
Share on other sites

Spoke too soon.

Just tested on a page with additional JS. 

I can open and edit, but when the modal closes there is a silent JS issue that kills all the other JS on the page.

I'm not getting any errors or warnings.

Update: Modal never closes after save on IE9, just hangs.

Share this post


Link to post
Share on other sites

the way modal closes is bit experimental. it does Ajax request to its own URL and then replaces body content. so all elements will be fresh ones. that us probably problem with js freeze. can you provide an URL for me to test that js case?

thanks for testing tom!

Share this post


Link to post
Share on other sites

Oh, sorry Marty. Didn't take a look at that one yet. It is somethig that needs to be supported by AjaxSave method in PW core.

And thanks for testing!

Share this post


Link to post
Share on other sites

the way modal closes is bit experimental. it does Ajax request to its own URL and then replaces body content. so all elements will be fresh ones. that us probably problem with js freeze. can you provide an URL for me to test that js case?

Unfortunately I don't have a way to open this site up yet. It's restricted using Shibboleth for authentication, so there's no way to create an account for a non-university user.

Share this post


Link to post
Share on other sites

How about now guys? In my tests this works great now on FF, Chrome (older ones too), Safari and IE9+.

Tom: I believe that your JS-issue is also fixed by this update. Also implemented the overflow: hidden, thanks for that - it works great.

Marty: Should work, but those image positions and repeater stuff still missing from AjaxSave method in PW core. I will start looking for that next (probably something that is relatively easy to support, but not sure yet and needs to be committed into core too).

Share this post


Link to post
Share on other sites

Antti,

I've just done some basics, but it seems to be working great now!  ^-^

Mac:

- Safari

- Chrome

- FF

Windows:

- IE9

- Chrome

I hope the sorting issue isn't too difficult to conquer — that's that last piece I would need to make this production ready.

Thanks for all your hard work.

  • Like 1

Share this post


Link to post
Share on other sites

I'm using latest dev of this module and it doesn't work with multilanguage. When editing alternative language it doesn't save it. It's still same as before editing.

Also there's a warning when using renderAll() viewing an alternative language:

Notice: Trying to get property of non-object in /home/updatepu/www/reitsimulator.ch/wire/core/Page.php on line 1239

Which results in the link not working cause httpUrl doesn't work correct.

Trying switching back to master.

Edit: with master it does save the alternative language fields again, but the warning above and broken link persists. I'm using latest PW.

Share this post


Link to post
Share on other sites

Edit: Ok as with some other modules (FormBuilder) too when using multilanguage the process page or any page that the module installs isn't active in the alternative language (LanguageSupportPageNames), so after enabling "english" on the FieldEdit Fredi process page the warning is gone. Tricky.

Share this post


Link to post
Share on other sites

But the saving problem persist? I guess that is also because ajax-saving in PW-core doesn't support multilang yet.

Share this post


Link to post
Share on other sites

Ah that must be it. Yeah the problem persists.

Share this post


Link to post
Share on other sites

Hi Antti,

Do you know if the core got the updates you needed for repeater reordering?

Edit: Looks like it didn't. I still can't (but would really love to) use Fredi and reorder a repeater.

Share this post


Link to post
Share on other sites

Oh, it seems my latest reply from few months went to Marty's message (it seems I pushed edit instead of reply)... so here it is:

How about now guys? In my tests this works great now on FF, Chrome (older ones too), Safari and IE9+.

Tom: I believe that your JS-issue is also fixed by this update. Also implemented the overflow: hidden, thanks for that - it works great.

Marty: Should work, but those image positions and repeater stuff still missing from AjaxSave method in PW core. I will start looking for that next (probably something that is relatively easy to support, but not sure yet and needs to be committed into core too).

Share this post


Link to post
Share on other sites

@apeisa 

Awesome! Awesome! Awesome! Module, you have allowed me to almost complete my project. 

I have run into an issue. 

I have a field that requires a check mark to display the appropriate fields.  

I wrote this script and am trying to allow editing to certain fields but only half of them show.  I double checked the field names and still no go. Only half work. 

Below is what I have:

 <?php
if($page->type_bar_club){

 echo $fredi->render("clublogo|featured_city|flyer|flyer2|second_promo_details");
 
 }
 
 ?> 

In the head.inc I have this script:

  
   <?php //loading front end editor
   
	 $fredi = $modules->get("Fredi");
	 echo $fredi->renderScript();
	?> 

Im not sure what the issue is.  >:(

Share this post


Link to post
Share on other sites

Nevermind, I figured it out.  It was the show if dependency that was throwing it off.  My mistake!!! Thanks again for the awesome module!

Share this post


Link to post
Share on other sites

I had to stop liking your posts Antti because I was wearing my mouse out :P

I should have been using this to save time on a tonne of stuff recently, but I hadn't noticed that you could create new pages with it now. It will be a huge timesaver for a bunch of simple pages that have tabular data as I can now add new "rows" (new page) and edit current rows (edit page) using Fredi without having to roll my own templates and code to reinvent the wheel :)

Share this post


Link to post
Share on other sites

Is it only view-able on front-end for admin, I realized it doesn't show links for my other roles. Is this expected?

Share this post


Link to post
Share on other sites

Yep, user should have page edit access to content they are editing.

Share this post


Link to post
Share on other sites

I can't figure out how to have it displayed for a custom role I created ("member").

I even allowed the template to control who has access and edit permissions to this page. Seems not to be working...

I've ran out of idea.

I have a template("Profile") which has fields from the built-in "user" template. The Fredi links works as expected for the "superuser" role, but doesn't show for the custom role "member".

Do you have any suggestions or am I missing something here? 

Thanks in advance for any help you can give me.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By BitPoet
      Here's a small new module that started as a spinoff of a memcache proof-of-concept. Cache your strings and partials in-memory using Redis as a backend.
      CacheRedis
      All you need is a running Redis database. The module supports connection through regular TCP, over TLS and via unix domain sockets. Host and port are configurable, and authentication is supported too. Here's a screenshot of the module configuration options:

      I'll not go into too many details about the usage, you can see everything explained in the README on GitHub, and just highlight the most important points.
      When the module is active, you'll have a wired $redis variable, which means you can reach the module as $redis, wire("redis") or within Wire classes / modules as $this->redis.
      CacheRedis is strongly influenced by WireCache, and its usage is (hopefully) straight forward.
      // Store an entry in the cache under the given key name with the given value: $redis->store("cached_value_number_one", $expire, $value); // Retrieve a value from the cache $value = $redis->fetch($key); // Delete a cache entry $redis->delete("my_other_cached_value"); // Clear the whole cache $redis->flush(); // Retrieve a value from the cache, and if not found, create it through the given function // and store it with a lifetime of 5 minutes (300 seconds) $value = $redis->fetch($key, 300, function() use($page) { return "Page last changed on " . strftime('%m/%d/%Y %H:%M', $page->modified | $page->created); }); // Render a file using wireRenderFile and store it in the cache. // We'll pass a selector as the expiry value so this cache gets // emptied every time a page matching the selector is saved. $news = $redis->renderFile("partials/news.php", 'template=blog-post', ["page" => $page]); The module is still very crude work in progress, but I hope some of you feel daring, try it out and let me know in case anything breaks.
      Have fun!
    • By joshua
      This module is (yet another) way for implementing a cookie management solution.
      Of course there are several other possibilities:
      - https://processwire.com/talk/topic/22920-klaro-cookie-consent-manager/
      - https://github.com/webmanufaktur/CookieManagementBanner
      - https://github.com/johannesdachsel/cookiemonster
      - https://www.oiljs.org/
      - ... and so on ...
      In this module you can configure which kind of cookie categories you want to manage:

      You can also enable the support for respecting the Do-Not-Track (DNT) header to don't annoy users, who already decided for all their browsing experience.
      Currently there are four possible cookie groups:
      - Necessary (always enabled)
      - Statistics
      - Marketing
      - External Media
      All groups can be renamed, so feel free to use other cookie group names. I just haven't found a way to implement a "repeater like" field as configurable module field ...
      When you want to load specific scripts ( like Google Analytics, Google Maps, ...) only after the user's content to this specific category of cookies, just use the following script syntax:
      <script type="optin" data-type="text/javascript" data-category="statistics" data-src="/path/to/your/statistic/script.js"></script> <script type="optin" data-type="text/javascript" data-category="marketing" data-src="/path/to/your/mareketing/script.js"></script> <script type="optin" data-type="text/javascript" data-category="external_media" data-src="/path/to/your/external-media/script.js"></script> <script type="optin" data-type="text/javascript" data-category="marketing">console.log("Inline scripts are also working!");</script> The type has to be "optin" to get recognized by PrivacyWire, the data-attributes are giving hints, how the script shall be loaded, if the data-category is within the cookie consents of the user. These scripts are loaded asynchronously after the user made the decision.
      If you want to give the users the possibility to change their consent, you can use the following Textformatter:
      [[privacywire-choose-cookies]] It's planned to add also other Textformatters to opt-out of specific cookie groups or delete the whole consent cookie.
      You can also add a custom link to output the banner again with a link / button with following class:
      <a href="#" class="privacywire-show-options">Show Cookie Options</a> <button class="privacywire-show-options">Show Cookie Options</button> This module is still in development, but we already use it on several production websites.
      You find it here: PrivacyWire Git Repo
      Download as .zip
      I would love to hear your feedback 🙂
      CHANGELOG
      0.0.5 Multi-language support included completely (also in TextFormatter). Added possibility to async load other assets (e.g. <img type="optin" data-category="marketing" data-src="https://via.placeholder.com/300x300">) 0.0.4 Added possibility to add an imprint link to the banner 0.0.3 Multi-language support for module config (still in development) 0.0.2 First release 0.0.1 Early development
    • By MoritzLost
      This is a new module that provides a simple solution to clearing all your cache layers at once, and an extensible interface to perform various cache-related actions.
      The simple motivation behind this module was that I was tired of manually clearing caches in several places after deploying a change on a live site. The basic purpose of this module is a simple Clear all caches link in the Setup menu which clears out all caches, no matter where they hide. You can customize what exactly the module does through it's configuration menu:
      Expire or delete all cache entries in the database, or selectively clear caches by namespace ($cache API) Clear the the template render cache. Clear out specific folders inside your site's cache directory (/site/assets/cache) Refresh version strings for static assets to bust client-side browser caches (this requires some setup, see the full documentation for details). This is the basic function of the module. However, you can also add different cache management action through the API and execute them through the module's interface. For this advanced usage, the module provides:
      An interface to see all available cache actions and execute them. A system log and logging output on the module page to see verify what the module is doing. A CacheControlTools class with utility functions to clear out different caches. An API to add cache actions, execute them programmatically and even modify the default action. Permission management, allowing you granular control over which user roles can execute which actions. The complete documentation can be found in the module's README.
      Beta release
      Note that I consider this a Beta release. Since the module is relatively aggressive in deleting some caches, I would advise you to install in on a test environment before using it on a live site.
      Let me know if you're getting any errors, have trouble using the module or if you have suggestions for improvement!
      In particular, can someone let me know if this module causes any problems with the ProCache module? I don't own or use it, so I can't check. As far as I can tell, ProCache uses a folder inside the cache directory to cache static pages, so my module should be able to clear the ProCache site cache as well, I'd appreciate it if someone can test that for me.
      Future plans
      If there is some interest in this, I plan to expand this to a more general cache management solution. I particular, I would like to add additional cache actions. Some ideas that came to mind:
      Warming up the template render cache for publicly accessible pages. Removing all active user sessions. Let me know if you have more suggestions!
      Links
      https://github.com/MoritzLost/ProcessCacheControl ProcessCacheControl in the Module directory

    • By David Karich
      Admin Page Tree Multiple Sorting
      ClassName: ProcessPageListMultipleSorting
      Extend the ordinary sort of children of a template in the admin page tree with multiple properties. For each template, you can define your own rule. Write each template (template-name) in a row, followed by a colon and then the additional field names for sorting.
      Example: All children of the template "blog" to be sorted in descending order according to the date of creation, then descending by modification date, and then by title. Type:
      blog: -created, -modified, title  Installation
      Copy the files for this module to /site/modules/ProcessPageListMultipleSorting/ In admin: Modules > Check for new modules. Install Module "Admin Page Tree Multible Sorting". Alternative in ProcessWire 2.4+
      Login to ProcessWire backend and go to Modules Click tab "New" and enter Module Class Name: "ProcessPageListMultipleSorting" Click "Download and Install"   Compatibility   I have currently tested the module only under PW 2.6+, but think that it works on older versions too. Maybe someone can give a feedback.     Download   PW-Repo: http://modules.processwire.com/modules/process-page-list-multiple-sorting/ GitHub: https://github.com/FlipZoomMedia/Processwire-ProcessPageListMultipleSorting     I hope someone can use the module. Have fun and best regards, David
×
×
  • Create New...