Jump to content

LanguageFieldTabs


adamspruijt

Recommended Posts

-------------------------------------------------------------------

LanguageFieldTabs is now included in ProcessWire by default (version 2.4). Unless you are using version 2.3 DO NOT install this module, instead navigate to Modules and then core and you will find the module in the Language section

-------------------------------------------------------------------

LanguageFieldTabs 

Beautify and organize you Field Languages into tabs!

DOWNLOAD  - Github

DEFAULT UI

post-778-0-32333900-1372433237.png

UI IN "UNIFY" ADMIN THEME

post-778-0-97857000-1371961376.png

Sorry for the lack luster write up, will add to Modules Directory later, late, long day tomorrow. Enjoy! (very much beta maybe alpha, minimal testing, just quick evening idea at this point).

Changelog

v1.0.2

  • Improved styling capabilities (added surrounding class "LangTabsContainer" )
  • Added admin wide support
  • Fixed description text order (was being pushed to bottom)

v1.0.3

  • Added support for toggling tabs display and faded labels to represent empty fields

v1.0.4

  • Fixed tabs destroy error
  • Moved toggle into Inputfield ui-widget-header

post-778-0-97857000-1371961376_thumb.png

post-778-0-32333900-1372433237_thumb.png

  • Like 19
Link to comment
Share on other sites

There's a little glitch in this module. It tries to create tabs in fieldsets.

Though not ideal, the code below will remove the unused div with uncomplete ul.

	$(".ui-tabs-nav").each(function(){
		if($(this).find('li').length == 0) {
			$(this).parent('.langTabs').remove();
		}
	});
  • Like 1
Link to comment
Share on other sites

I'm really liking this module. Thanks for making this! I used it yesterday, all day on a multi-language site that I'm developing with 5 different languages. It has really made the interface a lot nicer to look at and use.  It makes me think we should have this in the core. There are two things I think I'd personally add to it though:

  • I'd make the tabs that have un-populated text a little different, perhaps a little faded or lighter text or something to indicate the empty state. Either that, or the populated tabs bold.
  • I'd add an option to to switch between tabbed view and regular stacked view. The reason is that I anticipate clients have cases where they are translating and want to see the text in multiple languages at the same time. But overall tabbed view seems like a much better default than what we've got now. 

Has anyone tried this with Teppo's text version control module? I'm wondering if it would break that... will probably find out later today.

  • Like 4
Link to comment
Share on other sites

I'm really liking this module. Thanks for making this! I used it yesterday, all day on a multi-language site that I'm developing with 5 different languages. It has really made the interface a lot nicer to look at and use.  It makes me think we should have this in the core. There are two things I think I'd personally add to it though:

  • I'd make the tabs that have un-populated text a little different, perhaps a little faded or lighter text or something to indicate the empty state. Either that, or the populated tabs bold.
  • I'd add an option to to switch between tabbed view and regular stacked view. The reason is that I anticipate clients have cases where they are translating and want to see the text in multiple languages at the same time. But overall tabbed view seems like a much better default than what we've got now. 

Has anyone tried this with Teppo's text version control module? I'm wondering if it would break that... will probably find out later today.

I hadn't thought of a toggle, but had planned to add an indicator for empty fields, maybe a strike-trough? I will see to adding both, thanks!

Link to comment
Share on other sites

There's a little glitch in this module. It tries to create tabs in fieldsets.

Though not ideal, the code below will remove the unused div with uncomplete ul.

	$(".ui-tabs-nav").each(function(){
		if($(this).find('li').length == 0) {
			$(this).parent('.langTabs').remove();
		}
	});

Is it possible I already fixed this? I have pushed a few minor tweaks as the module was a touch rough when I first made the thread. Anyway, I'm not seeing this happen maybe I'm just misunderstanding.

Link to comment
Share on other sites

I hadn't thought of a toggle, but had planned to add an indicator for empty fields, maybe a strike-trough? I will see to adding both, thanks!

I prefer the faded style suggested by Ryan rather than a strike-through...

  • Like 1
Link to comment
Share on other sites

Wow that was quick – Thanks, great update! It seems to work well, but two issues I'm running into, at least on the default admin theme:

  • Clicking the toggle button for the first time works, but throws a JS error. Clicking it a second time does not work. So you can switch to expanded view, but not switch back to tabs. The JS error is: "Uncaught Error: cannot call methods on tabs prior to initialization; attempted to call method 'destroy'." I did try to debug it a bit, but wasn't sure how to fix it. 
  • Not a bug per se, but the position of the toggle icon seems a little unusual at least in the default profile (see screenshot). Maybe there is something that works better across themes, not sure? Though let me know if you think there is an issue in the default admin theme CSS that needs tweaking.   

Thanks for your great work on this module. It's already one of my favorites. 

post-2-0-13403500-1372413876_thumb.png

Link to comment
Share on other sites

Yep, the toggle button issue is an odd one, if you keep click on it the fields will collapse eventually and after that should go back and fourth fine. I will tweak the styling for sure, the problem isn't so much with the default admin theme as it is just a limitation of the markup. I will focus on getting to look good with the default admin before I worry about it on any of my themes.

EDIT:

Might be an easy fix, it seems the number of repeat clicks is proportional to the number of Language Fields on the page, something bad in my loop.

Link to comment
Share on other sites

Wow that was quick – Thanks, great update! It seems to work well, but two issues I'm running into, at least on the default admin theme:

  • Clicking the toggle button for the first time works, but throws a JS error. Clicking it a second time does not work. So you can switch to expanded view, but not switch back to tabs. The JS error is: "Uncaught Error: cannot call methods on tabs prior to initialization; attempted to call method 'destroy'." I did try to debug it a bit, but wasn't sure how to fix it. 
  • Not a bug per se, but the position of the toggle icon seems a little unusual at least in the default profile (see screenshot). Maybe there is something that works better across themes, not sure? Though let me know if you think there is an issue in the default admin theme CSS that needs tweaking.   

Thanks for your great work on this module. It's already one of my favorites. 

attachicon.gifScreen shot 2013-06-28 at 5.51.57 AM.png

V1.0.4 pushed, should fix both issues, a bit more cleanup and optimization needed but I'm pretty happy with this where it is, just wondering how I can make the title text translatable if it's inserted using JS? Maybe I missed that in the docs.

  • Like 1
Link to comment
Share on other sites

V1.0.4 pushed, should fix both issues, a bit more cleanup and optimization needed but I'm pretty happy with this where it is, just wondering how I can make the title text translatable if it's inserted using JS? Maybe I missed that in the docs.

Thanks for the update–It works perfectly here!

I will submit a pull request to you that makes the title attribute translatable. I also moved the hook-attach logic to a ready() method (rather than init), and made it attach the hooks only if the page template is 'admin'. 

  • Like 2
Link to comment
Share on other sites

Thanks for the update–It works perfectly here!

I will submit a pull request to you that makes the title attribute translatable. I also moved the hook-attach logic to a ready() method (rather than init), and made it attach the hooks only if the page template is 'admin'. 

Thanks for the quick addition Ryan, nice to see how the JS translatable string is handled, noted for next time.

Submitted to Module Directory :)

Edited by adamspruijt
Link to comment
Share on other sites

Also wanted to chime in and say wow! It could be almost coming from me ;)

Joke aside, I really thought about that the day Ryan implemented this, but never bothered as I'm not currently needing it. Really cool here's how it looks on my Teflon dev theme.

post-100-0-50761800-1372447949_thumb.png

  • Like 1
Link to comment
Share on other sites

/*
not looka.so nice on pages name.setting tab i changes js.file from this
*/

var $langField = $(".Inputfield").has(".LanguageSupport");

/*
to this.
*/

var $langField = $(".Inputfield:not(.InputfieldPageName)").has(".LanguageSupport");
 

uses daveleper.branch i do

Link to comment
Share on other sites

/*
not looka.so nice on pages name.setting tab i changes js.file from this
*/

var $langField = $(".Inputfield").has(".LanguageSupport");

/*
to this.
*/

var $langField = $(".Inputfield:not(.InputfieldPageName)").has(".LanguageSupport");
 

uses daveleper.branch i do

Are you using a specific admin theme? I just checked in a few and they all looked perfectly fine.

Link to comment
Share on other sites

I think he's talking about the page name field on the settings tab. It says "Active" after each language name, like "English Active", "Spanish Active", etc. It looks like it's picking up the LanguageSupportPageNames checkbox label in the tab. As far as I can tell, WillyC's solution above was to prevent it from making tabs out of the page name field. Tested here and seems to work. 

Link to comment
Share on other sites

I think he's talking about the page name field on the settings tab. It says "Active" after each language name, like "English Active", "Spanish Active", etc. It looks like it's picking up the LanguageSupportPageNames checkbox label in the tab. As far as I can tell, WillyC's solution above was to prevent it from making tabs out of the page name field. Tested here and seems to work. 

Ok, gotcha. All fixed, my selector finding the label value wasn't specific enough. Pushed the changes.

  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

One idea came up, and was just curious about the feasibility of it: What if the "active" tab was based on the current user's language? So if I had my language set as Spanish, I'd see the Spanish tabs active (rather than default language tab) when editing a page? 

  • Like 3
Link to comment
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 Sebi
      AppApiFile adds the /file endpoint to the AppApi routes definition. Makes it possible to query files via the api. 
      This module relies on the base module AppApi, which must be installed before AppApiFile can do its work.
      Features
      You can access all files that are uploaded at any ProcessWire page. Call api/file/route/in/pagetree?file=test.jpg to access a page via its route in the page tree. Alternatively you can call api/file/4242?file=test.jpg (e.g.,) to access a page by its id. The module will make sure that the page is accessible by the active user.
      The GET-param "file" defines the basename of the file which you want to get.
      The following GET-params (optional) can be used to manipulate an image:
      width height maxwidth maxheight cropX cropY Use GET-Param format=base64 to receive the file in base64 format.
    • By MarkE
      This fieldtype and inputfield bundle was built for storing measurement values within a field, rendering them in a variety of formats and converting them to other units or otherwise modifying them via the API.
      The API consists of a number of predefined functions, some of which include...
      render() for rendering the measurement object, valueAs() for converting the value to another unit value, convertTo() for converting the whole measurement object to different units, and add() and subtract() for for modifying the stored value by the value (converted as required) in another measurement. In the admin the inputfield includes a checkbox (which can be optionally disabled) for converting values on page save. For an example if a value was typed in as centimeters, the unit was changed to metres, and the page saved with this checkbox selected, said value would be automatically converted so that e.g. 170 cm becomes 1.7 m.

      A simple length field using Fieldtype Measurement and Inputfield Measurement.
      Combination units (e.g. feet and inches) are also supported.
      Please note that this module is 'proof of concept' at the moment - there are limited units available and quite a lot of code tidying to do. More units will be added shortly.
      See the GitHub at https://github.com/MetaTunes/FieldtypeMeasurement for full details and updates.
    • By tcnet
      File Manager for ProcessWire is a module to manager files and folders from the CMS backend. It supports creating, deleting, renaming, packing, unpacking, uploading, downloading and editing of files and folders. The integrated code editor ACE supports highlighting of all common programming languages.
      https://github.com/techcnet/ProcessFileManager

      Warning
      This module is probably the most powerful module. You might destroy your processwire installation if you don't exactly know what you doing. Be careful and use it at your own risk!
      ACE code editor
      This module uses ACE code editor available from: https://github.com/ajaxorg/ace

      Dragscroll
      This module uses the JavaScript dragscroll available from: http://github.com/asvd/dragscroll. Dragscroll adds the ability to drag the table horizontally with the mouse pointer.
      PHP File Manager
      This module uses a modified version of PHP File Manager available from: https://github.com/alexantr/filemanager
       
    • By tcnet
      This module implements the website live chat service from tawk.to. Actually the module doesn't have to do much. It just need to inserted a few lines of JavaScript just before the closing body tag </body> on each side. However, the module offers additional options to display the widget only on certain pages.
      Create an account
      Visit https://www.tawk.to and create an account. It's free! At some point you will reach a page where you can copy the required JavaScript-code.

      Open the module settings and paste the JavaScript-code into the field as shown below. Click "Submit" and that's all.

      Open the module settings
      The settings for this module are located int the menu Modules=>Configure=>LiveChatTawkTo.

       
    • By tcnet
      Session Viewer is a module for ProcessWire to list session files and display session data. This module is helpful to display the session data of a specific session or to kick out a logged in user by simply delete his session file. After installation the module is available in the Setup menu.

      The following conditions must be met for the module to work properly:
      Session files
      Session data must be stored in session files, which is the default way in ProcessWire. Sessions stored in the database are not supported by this module. The path to the directory where the session files are stored must be declared in the ProcessWire configuration which is by default: site/assets/sessions.
      Serialize handler
      In order to transform session data easier back to a PHP array, the session data is stored serialized. PHP offers a way to declare a custom serialize handler. This module supports only the default serialize handlers: php, php_binary and php_serialize. WDDX was dropped in PHP 7.4.0 and is therefore not supported by this module as well as any other custom serialize handler. Which serialize handler is actually used you can find out in the module configuration which is available under Modules=>Configure=>SessionViewer.

      Session data
      The session data can be displayed in two different ways. PHP's default output for arrays print_r() or by default for this module nice_r() offered on github: https://github.com/uuf6429/nice_r. There is a setting in the module configuration if someone prefers print_r(). Apart from the better handling and overview of the folded session data the output of nice_r() looks indeed nicer.

      Links
      ProcessWire module directory
      github.com
×
×
  • Create New...